Stataの概要:変数の作成と変更

これは、Stataの概要の第六部です。 Stataを初めて使用する場合は、最初から始めることを強くお勧めします。この記事では、新しい変数の作成、既存の変数の変更、およびラベルの作成の基本について説明します。

このビデオの次のコンテンツにスキップします

この記事では、新しい変数の作成、既存の変数の変更、およびラベルの作成の基本について説明します。

Generate and Replace

変数を作成および変更するための主なコマンドは、generate(通常はgenと略されます)およびreplace(情報を破壊する他のコマンドと同様に、省略形はありません)です。 genは新しい変数を作成し、replaceは既存の変数の値を変更します。 それらのコア構文は同じです:

gen variable=expression

or

replace variable=expression

ここで、variableは作成または変更する変数の名前で、expressionは結果を入れたい数式です。 式は、単一の数のように単純であるか、複雑な関数のすべての種類を含むことができます。 ヘルプ関数を入力すると、使用可能な関数を調べることができます。 式がいずれかの時点で欠損値に依存している場合、結果は欠損しています。 通常、これはまさにあなたが期待したいものです。

データを変更するときにdoファイルを使用することは特に重要なので、自動データセットをロードするdoファイルを作成することから始めます。

capture log close
log using vars。log,replace
clear all
sysuse auto

autoデータセットの価格は1978ドルであるため、2020ドルに変換すると便利かもしれません。 これを行うには、2020年の消費者物価指数を1978年の消費者物価指数で割った換算係数、または約4を価格に掛ける必要があります。 コードは次のようになります:

gen price2020=price*4

この行をdoファイルに追加し、実行して結果を調べます。

browse make price price2020

価格はまだ一般的に自動車販売店で見られるよりも低いですが、それはおそらく今日の車が1978年の車よりもはるかに優れているためです。 これは、あなたの仕事をチェックする方法の良い例です:あなたが期待したものに得たものを比較し、それらが一致しない場合は、理由を知っているこ

内部的に、Stataはループを実行しました: 最初の観測値のprice*4を計算し、最初の観測値のprice2020に結果を格納した後、2番目の観測値のprice*4を計算し、2番目の観測値のprice2020に結果を格納しました。 StataのData Wranglingでは、この一度の観察ごとのパラダイムを拡張する方法を学びますが、それを破るタスク(計算手段など)には、すぐに説明する別のアプローチが必

もう少し正確にして、変換係数として4.14を使用したいとします。 Price2020変数を「修正」するコードを追加しようとする誘惑があるかもしれません(たとえば、4.14/4を乗算します)。 しかし、最初に作成したコードを修正する方が簡単できれいです。 変更:

gen price2020=price*4

to:

gen price2020=price*4.14

doファイルを再度実行します。 Doファイルは、実行されるたびに元のデータをディスクからロードするため、price2020変数を本来の方法で作成するだけです。priceとprice2020の両方を使用すると、その値を比較して作業を確認できます。

しかし、2020ドルで作業したいだけで、式が正しいと確信している場合は、replaceコマンドを使用して、新しい値を作成する代わりに既存のprice変数を変更できます。

replace price=price*4.14

このバージョンを実行すると、メッセージが表示されます(74の実際の変更が行われました)。 データセットに74の観測値があることを考えると、これはあなたが期待するようにそれらのすべてが変更されたことをあなたに伝えます。 If条件を含め始めると、実際に変更された観測値の数は非常に有用な情報になります。練習

練習

練習: 米国外では、燃料効率はキロメートルあたりのリットルで頻繁に測定されます(使用される燃料は分子内にあるため、低い数値が良いことに注意してくださ ガロンあたりのマイルをキロメートルあたりのリットルに変換するには、mpg(1/mpg)の逆数に2.35を掛けます。 キロ当たりリットルで各車の燃料効率を格納する変数を作成します。

If条件で変数を作成する

このビデオの後のコンテンツにスキップ

genコマンドにif条件がある場合、結果の変数はすべてのオブザベ ただし、if条件が真でない観測値には欠損値が割り当てられます。 Replaceコマンドにif条件がある場合、if条件がtrueでないオブザベーションは変更されません。 これにより、観測値ごとに変数を異なる値に設定することができます。

rep78変数の五点スケールを三点スケールに折りたたむとします。 これを行うには、次のコードをdoファイルに追加します:p>

gen rep3=1if rep78<3
rep3=2if rep78==3
rep3=3if rep78>&rep78<rep78<rep78<rep78<rep78<rep78<。最初の行は新しい変数rep3を作成しますが、rep78が3未満の場合にのみ1に設定します。 他の人は行方不明になります。 第二の行は、それらのミスのいくつかをtwosに変更し、第三は、それらの多くをスリーに変更します。 Doファイルを実行し、各行によって変更された観測値の数をメモし、それをデータセット内の観測値の合計数と比較します。

rep78が欠落している観測値のrep3の値は何ですか? それは何か他のものに設定されていなかったので、それがあるべきように、欠落しています。 Rep78が欠落している五つの観測値は、暗黙的または明示的に三つのコマンドすべてから除外されたので、rep3の欠損値で始まり、変更されませんでした。 (最後のコマンドから欠損値を除外するのを忘れた場合、rep78が欠落している車ではrep3は3になります。 覚えておいて、行方不明は本質的に無限大です。)

運動: それらの非常に少数があるので、ものと二つを組み合わせることは理にかなっていますが、四つんばいと五つんばいを組み合わせる必要はありません 1と2を組み合わせ、それに応じて他のカテゴリの番号を変更するrep4変数を作成します(つまり、rep4は1から4に移動する必要があります)。

Recode

このビデオの後のコンテンツにスキップ

recodeコマンドを使用すると、rep3を作成する別の方法が提供されます。 それは再コーディングの仕事のためにもっぱら設計され、genおよび取り替えより大いにより少なく適用範囲が広い。 しかし、それは非常に使いやすいです。 構文は次のとおりです:

再コードvar(ルール1)(ルール2)(必要に応じてより多くのルール…最後のgenオプションは必要ありません—それがない場合は、新しい値で新しい変数を作成するのではなく、元の変数が変更されます。 また、変数のリストを再コード化して、すべてを同じ方法で再コード化することもできます。

recodeコマンドのコアは、変数を再コードする方法を指示するルールのリストです。 それらは形式を取ります(inputValue=outputValue)。 InputValueは、単一の数値、スペースで区切られた数値のリスト、またはstart/endで指定された数値の範囲にすることができます。 OutputValueは常に単一の数値になります。 ルールでカバーされていないものは変更されないので、recodeを使用して変数のいくつかの値を変更したり、ここで行うように完全に再定義したりできます。 Rep78を三点スケールに変換するrecodeバージョンは次のとおりです。

recode rep78(1 2 = 1) (3 = 2) (4 5 = 3), Gen(rep3b)

欠損値は特別な処理を必要としません: どのルールの入力値にもmissingがリストされていないため、missing値を持つ観測値は変更されません。演習:recodeを使用して、上記のように1と2のみを組み合わせて、rep4bを作成します。

指標変数

このビデオの後のコンテンツにスキップ

指標変数の作成では、新しい変数を条件に等しく設定することで、Stataがtrueを1として、falseを 考えてみてください:

gen lowMPG=(mpg<20)

(括弧はオプションですが、読みやすくします。 これは、mpgが20未満の車の場合は1(true)、mpgが20以上の場合はゼロ(false)です。 結果を表示するには、doファイルを実行し、browse make mpg if lowMPGと入力します。

車にmpgの欠損値はありませんが、もしそうなら、上記のコードは、燃費が良いことが知られているかのように、lowMPGにゼロを割り当てます。

車にはmpgの欠損値がありません。 このような場合は、lowMPG変数が欠落している必要があります。

gen lowMPG=(mpg<20)if mpg<。練習

練習

練習: 良好な修理記録を持つ車を識別するインジケータ変数を作成します(rep78が3より大きいと定義されます)。 良好な修理記録を持つことが知られている車を識別するためにインジケータ変数が必要な場合、コードはどのように変更されますか?

文字列変数

このビデオの後のコンテンツにスキップ

genとreplaceコマンドは文字列変数でも動作します。 等号の右側の式は数学的なものではありませんが、同様の規則に従います。 文字列値は常に引用符で囲まれているため、文字xをxという変数に格納したい場合は、gen x=”x”と言います。 なぜなら、x in quotes(“x”)は文字xを意味し、x without quotesは変数xを意味するからです。

文字列の追加は、文字列を次々に置くこととして定義されているので、”abc”+”def”=”abcdef”。 しかし、文字列のほとんどの作業は、文字列を入力(文字列値または文字列を含む変数)として受け取り、文字列を出力として返す特殊な目的の関数によ

make変数には、実際には、車を生産した会社の名前と車のモデルの名前の2つの情報が記録されます。 Word()関数を使用して会社名を簡単に抽出できます。

gen company=word(make,1)

結果を表示するには、doファイルを実行し、browse make companyと入力します。 Word()関数の最初の入力または引数は、動作する文字列です(この場合は文字列を含む変数)。 第二は、あなたがしたい単語をそれを伝える数字です。 この関数は、入力文字列を含まれるスペースに基づいて単語に分割し、要求した文字列、この場合は最初の文字列を返します。

テキストデータの文字列関数について詳しく説明します(今後)が、始めることを熱望している場合は、次の関数だけで多くのことを行うことがで:tr>

文字列から単語を抽出します strpos() 文字列に別の文字列が含まれているかどうか、その位置が含まれているかどうかを示します substr() substr() substr() substr() substr() substr() substr() substr() substr() substr() substr() td>文字列の一部を抽出します subinstr() 文字列の一部を他のものに置き換えます length() 文字列の長さ(含まれている文字の数)

ヘルプと入力し、関数の名前を入力します。 それがどのように動作するかを学ぶためのメインStataウィンドウ。演習:車のモデルの名前(つまり、makeの残りの部分)を含むモデル変数を作成します。 コードでは、1つまたは2つの単語の長さのモデル名を処理できる必要があります。

文字列変数を数値変数に変換する

このビデオの後のコンテンツにスキップ

数値である必要がある変数が文字列としてStataに入力さ 数値を含む文字列変数を数値変数に変換するdestringコマンドでこれを修正できます。 構文は単にdestring variable、replaceであり、variableはdestringedされる変数(または変数)の名前で置き換える必要があります。 文字列変数に数値以外のものが含まれている場合は、forceオプションを追加してStataに変換するように指示できますが、数値以外の文字を含む観測では “数字以外の文字”にはドル記号とカンマが含まれていることに注意してください! 一般的に、forceオプションを使用する必要がある場合は、Stataがあなたが何をしているのかわからないので、それを行う前に慎重に考える必要があります。 この場合、数字以外の文字を調べて、最初にそれらを削除するのが理にかなっているかどうか(ドル記号やカンマのように)、または変数が実際には数字ではないかどうかを確認する必要があります。

このデータセットには、destringedする必要のある変数はありませんので、次のようにしましょう。

gen x=”5″

“5”の周りの引用符は、xが値5を含む数値変数ではなく、文字5を含む文字列変数であることを意味することに注意してください。 物事を複雑にするために、xの値の一部を実際のテキストに変更しましょう:

replace x=”missing”if foreign

今度はxをdestringしようとします。

destring x、replace

Stataは拒否します。xの値の一部は数値に変換できないためです。 しかし、変換できない値は「欠落」しているため、それらを欠損値に変換することが完全に適切です。 したがって、forceオプションを使用してもう一度試してください:

destring x、replace force

Stataはxを数値変数に変換し、欠損値がいくつかあります。

Egen

このビデオの後のコンテンツにスキップ

“extended generate”の略であるegenコマンドを使用すると、別の関数ライブラリにアクセスできます。 それは少しhodge-podgeですが、egen関数はあなたが最も使用します要約統計を計算します:

Name Description
min() Minimum value
max() Maximum value
mean() Mean
median() Median
sd() Standard Deviation
total() Total

These are examples of aggregate functions: they take multiple numbers as input and return a single number as output. 彼らはまた、観測にわたって動作するため、一度に一つの観測を動作させるので、genを使用して簡単に行うことはできません。 構文はgenとほぼ同じに見えます:

egen variable=function()

egenとの大きな違いは、独自の数式を書いているのではなく、ライブラリの関数を使用していることです。 たとえば、変数を平均を2で割った値に設定する必要がある場合、egen y=mean(x)/2とは言えません。 代わりに、最初にegen y=mean(x)を実行してから、y=y/2を置き換えます。

もう一つの重要な違いは、欠損値がどのように処理されるかです。 Genでは、入力の一部が欠落していた場合、出力が欠落していることを思い出してください。 ただし、egenは単に欠損値を無視し、使用可能なデータを使用して結果を計算します。 通常、これはあなたが望むものですが、egenが何をしているのかを認識し、特定のタスクに理にかなっていることを確認する必要があります。

要約統計量を計算するためのegen関数は、グループの要約統計量を計算するためにbyと非常に一般的に組み合わされています。 各企業の平均自動車価格を計算し、結果を次のように表示します。

bysort company: egen meanPrice=mean(price)
タブcompany,sum(meanPrice)

Bysort company:最初にデータをcompanyごとにソートし、次のegenコマンドを会社ごとに別々に実行したことを思い出してください。

標準偏差のゼロは、同じ会社によって生産されたすべての車がmeanPriceの同じ値を持っているという事実を反映しています。 それは、meanPriceが車ではなく会社を説明しているからです。 実際、それはグループを記述する変数の定義です:同じグループ内のすべてのユニットは、変数の同じ値を持っている必要があります。

各会社の価格の平均値のみを確認したい場合は、次のように実行するだけです。

tab company,sum(price)

しかし、egenを実行したので、変数に平均値があり、使演習:各会社のrep78の平均値を含む変数を作成します。 次に、tabを使用して双方向テーブルを作成して、各社内のrep78の頻度を調べます。 欠損値を含めるようにしてください。 リンカーンとオールズは同じ平均を持っています;どれだけこれは、両社のためのrep78の分布を要約したと思いますか? 次に、欠損値を検討します: valeが欠落している車のrep78の実際の値が明らかにされたとします。 これらの手段が変わらないためには、彼らは何でなければならないでしょうか? それはどのようにもっともらしいですか?

ラベル

このビデオの後のコンテンツにスキップ

優れたラベルは、データを理解して作業するのがはるかに簡単になります。 Stataには多くの種類のラベルがありますが、最も一般的で最も有用な変数ラベルと値ラベルに焦点を当てます。

変数ラベル

変数ラベルは変数に関する情報を伝達し、長い変数名の代わりにすることができます。 このデータセットには、変数ウィンドウでわかるように、変数ラベルの適切なセットが既にあります。 混乱しているのはforeignのラベルだけなので、label variableコマンドを使用して変更してください。 変数ラベルを設定する構文は次のとおりです。

label variable variableName”label”

そう入力します。

label variable foreign”Car Origin”

変数ウィンドウをもう一度見て、結果を確認します。

値ラベル

値ラベルは、カテゴリの意味を伝えるためにカテゴリ変数で使用されます。 私たちは、外部変数で動作しているものを見てきました: 0は「国内」を意味し、1は「外国」を意味することを私たちに伝えたのは値ラベルでした。”

rep78を5点スケールから3点スケールに折りたたむために再コーディングした新しい変数rep3の値をラベル付けして、値ラベルを調べてみましょう。 値ラベルは、整数のセットからテキスト記述のセットへのマッピングであるため、最初のステップはマップを定義することです。 これを行うには、label defineコマンドを使用します。

label define mapName value1″label1″value2″label2″。..

したがって

:

label define replabel1″Bad”2″Average”3″Good”

これはreplabelと呼ばれるマッピングを作成しますが、何にも適用しません。 有用なことをする前に、定義したreplabelマッピングを使用してrep変数の値にラベルを付けるようにStataに指示する必要があります。 構文は次のとおりです。

label values variable map

したがって、

label values rep3replabel

結果を表示するには、次のように実行します。

list make rep3

マップが定義されたら、任意の数の変数に適用できます。上記のlabel valuesコマンドの単一の変数を変数のリストに置き換えるだけです。 アンケートデータを操作していて、回答者の性別、回答者の配偶者の性別、および回答者のすべての子供の性別が変数に含まれているとします。 Genderと呼ばれる1つのマップだけを定義し、それを使用してすべてのgender変数の値にラベルを付けることができます。

値ラベルを管理するための3つのコマンド:label dirは定義されたすべてのラベルのリストを提供し、label listはそれらが何を意味するのかを示します。 Describeコマンドは、各変数に関連付けられている値ラベルの名前を示します(他の多くの便利なものの中でも)。練習

練習

練習: Rep4の値ラベルを作成して適用します。 レベルを記述する方法を決定すること自由に感じなさい。recodeを使用して新しい変数を作成すると、Stataは自動的に変数ラベルを作成します(”RECODE of…”). また、値を定義するルールの最後に各値に必要なラベルを配置することで、値ラベルを定義することもできます。 Rep3のさらに別のバージョンを作成します。

recode rep78(1 2=1″Bad”)(3=2″Average”)(4 5=3″Good”),gen(rep3c)

Exercise: Recodeを使用してrep4cを作成し、値ラベルを設定します。このdoファイルは、使用するデータセットを変更するため、新しいバージョンを保存する必要があります。

このdoファイルは、使用するデー 新しいデータをautoとして保存しないでください。 その変数は変更されたデータセットに既に存在するため、price2020を作成しようとしたときにクラッシュします。 代わりに、”自動車データセットのバージョン2″のように、データをautov2として保存します。”

autov2を保存し、置き換えます

最後に、ログを閉じます:

log close

これにより、Stataの紹介が終わります。 私達はそれがずっとあなたに有用であることを望みます。 詳細については、Stata、またはSSCCの統計コンピューティングナレッジベースの他の内容でデータの論争を読むことを検討してください。

最終更新日:2020/05/27

コメントを残す

メールアドレスが公開されることはありません。