3

私は最近、手続き型/ OO /機能的なバックグラウンドからStataに参加しましたが、言語の基本的な要素を理解するのに苦労しています。

たとえば、syntax「プログラムが、標準のStata構文などの文法に従ってユーザーが入力した引数を解釈できるようにする」コマンドがあることを発見しました。これが、一部のコマンドが引数として指定された変数のリストを空白で区切る必要があるのに対し、他のコマンドはコンマ区切りのリストを必要とする理由であると推測します。しかし、(パラメーター)構文が強制されるのではなく、プログラムが独自の構文を定義するという考えは、明らかに奇妙に思えます。

もう1つの非常に興味深い構成は、マクロの定義と展開(`macro')の構文、および他の言語で知られているローカル変数の明らかな欠如です。

私のバックグラウンドを持つ人々に言語の基本的な概念を説明する「Java開発者のためのStata」ドキュメントのようなものはありますか?

PS:この質問が不明確に思われる場合はお詫び申し上げます。残念ながら、現時点では、より具体的で明確な質問を作成することはできません:(

4

2 に答える 2

10

あなたが何を探しているのか正確にはわかりません...しかし、ここにいくつかの関連するポイントがあります。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
于 2011-05-10T20:12:08.013 に答える
2

いくつかの本は「XforYユーザー」アプローチを提供していますが、一般的には統計ソフトウェアソリューション間です。あなたの質問に関しては、私は最初に本能を使うことをお勧めします。

私は約10年前に(プログラミングとマークアップ)コードを読み始めました。多くの言語でコーディングすることはできませんが、いくつかの言語はかなり簡単に読むことができます。Stataのコアコマンドのほとんどは単純でありoverifまたはreplace(自発的に多様なステートメントのセットを取得するために)のような繰り返しのオプションのステートメントが理解して適用しやすいため、Stataは簡単であることがわかりました。

私がStataを教えるとき、私はいつも生徒にhelp私と同じようにページを使用させるのに問題があります(そして、Rのように、ページに簡単にアクセスできるという事実が大好きです)。構文の指示がすぐに読めるという事実を考慮して、パラドックスを説明します。構文は、あなたの質問に対する以前の回答で非常によくカバーされています。

utilities余分なマイルは、フォルダにStataが付属している[R]、[U]、特に[P]ハンドブックを開くことです。そこには豊富な詳細があり、プログラマーとトレーニング統計家の両方に興味があります。localここで、 /globalforeach/などのコマンドの明白なロジックを超えて、マクロとループの使用法を学びましたwhile(この用語を正しく理解していれば、Stataはチューリング完全です)。

マクロループで一重引用符/二重引用符を使用する場合、Stataは少し面倒な場合がありますが、それ以外の場合は非常に簡単です。楽しむ!

于 2011-05-13T09:11:34.910 に答える