2017-03-28 20 views
0

Stataでマクロを作成しようとしています。このマクロは、後で私のdo-fileで参照する変数名を設定するため、変数名をローカルマクロに置き換えようとしています。変数を参照するローカルマクロを使用するにはどうすればよいですか?

例のデータは次のとおりです。

ID Indicator1 Indicator2 Amount 
1 1   0    10 
2 0   1    2 
3 0   0    3 
4 1   0    5 
5 1   1    20 

私のデータは、指標の数を持っています。しかし、私は一度に1つのインジケータだけで作業する必要があります。だから私は現在作業中のインジケータをマクロに入れて、コード全体で1つだけ変更する必要があります。私のコードは次のとおりです。

local myvar = "Indicator" 

私が欲しいのは、このようなものを使用することができることです。しかし

sum Amount if "`myvar'" == 1 

、私が定義されてい"type mismatch"にもmyvarかかわらというエラーを得続けます。名前myvarとローカルマクロ内のリテラルテキストIndicatorを置くこれら

local myvar "Indicator" 

または

local myvar = "Indicator" 

または

local myvar Indicator 

のいずれかを入力して

答えて

1

。この例の" "はデリミタであり、最後の例が示すように、この場合は省略可能です。ここまでは順調ですね。

summarizeステートメントで" "を使用すると、ローカルマクロが評価された結果を意図しているとStataに示すようになります。リテラル文字列は、別のリテラル文字列または文字列変数の内容(名前で示される)としか比較できません。したがって、エラーメッセージtype mismatch

だから、これは法律上のようになります。"indicator""1"に等しくないので、ステートメントが(それが試されたため、すべての観測に)偽になるので

sum Amount if "`myvar'" == "1" 

何も、起こらないだろう。しかし、 Stataは構文に問題はありません。

しかし、それはあなたが望むものではありません。あなたは地元のマクロが定義されているという事実が、ここでは重要ではない

sum Amount if `myvar' == 1 

を書く意味変数名として処理されるべきローカルマクロの内容をしたいです。不適切に使用されています。

+0

ありがとうございます。 '' myvar '== 1'で、今回エラーが定義されていても '== 1 invalid name'と表示されていればsum Amountを使ってみました。 – Kany

+1

おそらく、その時点でローカルマクロが表示されていないことを意味します。これは、doファイルをチャンクで実行することによる共通の副作用です。一度に1行。ローカルとは、それが言うことを意味します:ローカル(コードの塊)。テストするには、使用する前にマクロを表示させてください: 'macro list'はそれを行うか、' di "\' myvar '"'を実行します。対処法は、ファイルをチャンクで実行することではなく、 'local'定義が確実に見えるようにすることです。 –

+0

大丈夫。問題は、私はチャンクでdoファイルを実行していたことです。それは今働く。 :) – Kany

関連する問題