あなたが何を探しているのか正確にはわかりません...しかし、ここにいくつかの関連するポイントがあります。Stataは、UnixシェルスクリプトやWindowsバッチファイルを作成するようなものです。各行はコマンドを実行し、最初の単語はコマンド名です。慣例により、ほとんどのコマンドの構造は次のとおりです。
command [varlist] [=exp] [if expression] [in range] [weight] [using filename] [, options]
括弧[。]は、オプションであることを意味します(または、コマンドによっては使用できません)。一部のコマンドにはプレフィックスを付けることができます(、、、などby:
)xi:
。StataCorpsvy:
と経験豊富なユーザーによるコマンドの構文はかなり一貫しています。ただし、Stataユーザーもコマンドを作成するため、奇妙なことが時々見られます。
Stataユーザーがコマンドを作成する場合、コマンドは.adoファイル(.doではなく)に保存され、program
コマンドを使用して定義されます。(help program
およびマニュアルの「Adoファイル」セクションを参照してください。)コマンドの記述は、他の言語(MatLabなど)での関数の記述に似ています。
このsyntax
コマンドは、独自のコマンドを作成するために使用されます。コマンドを実行すると、コマンドの名前(command
上記)に続くすべてのものがローカルマクロのプログラムに渡され`0'
ます。`varlist'
構文コマンドはこのローカルマクロを解析するため、参照などを行うことができます`if'
。理論的には、`0'
自分で解析することもできますが、構文コマンドを使用すると、(従来の構文に従っている限り)自分とユーザーにとってはるかに簡単になります。一番下に例を示します。
「他の言語で知られているように、ローカル変数が明らかに存在しない」とはどういう意味か正確にはわかりません。マクロは、単一の文字列または単一の数値をメモリに格納します。 これが私がStataのローカル/グローバルマクロについて書いたコメントです。それらは確かにStataのプログラミング言語のユニークな機能です。その名前が示すように、「ローカル」マクロは指定されたプログラム(コマンド)または.doファイル内でのみ使用できますが、「グローバル」マクロはStataセッション全体で使用できます。
Stataのマクロに慣れると、他の言語のマクロを見逃し始めたことがわかりました。彼らはかなり便利です。scalar
(ローカル/グローバル)マクロとメインデータセットに加えて、 andmatrix
コマンド(および他の1つまたは2つのあいまいなもの)を使用して「もの」をメモリに格納することもできます。
それがお役に立てば幸いです。 これが役立つかもしれないリストリソースです。
例:
program define myprogram
syntax varlist [if], [hello(string) yes]
macro list _0 _varlist _if _hello _yes
summarize `varlist' `if'
display "Here's the string in my hello option: `hello'"
if !missing("`yes'") di "Yes is on"
else di "Yes is off"
end
sysuse auto.dta
myprogram rep78 headroom if price > 5000 , hello("world") yes