Labelの設定②

プログラミング

今回も前回に引き続いて変数ラベルと値ラベルに関してまとめていきます.基本コマンドである.labelについては前回の記事で概要をまとめました。そして今回はその拡張版である.elabelについてまとめていきます.

1.コマンドを入手する

例によってこのコマンドはデフォルトでは入っていませんので、入手するところから始めましょう.

click here to installをクリック!

これでado-fileを入手したらいつでも使うことができます.

2.サブコマンド紹介

このコマンドにもサブコマンドがありますが、基本的なsyntaxは以下の様になっています.

 elabel subcommand [ elblnamelist ] [ mappings ] [ iff eexp ] [, options ]

このコマンドの魅力は、

  • wildcardを含めることができる:*, ~, ?
  • 複数のラベルの指定を一気に行うことができる.このときの対応の仕方は、「番号または変数名 “ラベル”」か「(番号リストや変数リスト) (“label1” “label2” …)」のように行います.(詳しくは後述)

ということになりますが、まずはサブコマンドを理解することから始めましょう.labelコマンドと同様のサブコマンドに加えて、elabel特有のサブコマンドがあります.

なお、iffはif(条件節)と同じです.eexpはexpressionのことですが、#や@などのwildcardを含みます.#は整数の穴埋め的に使い、@はテキストを埋めます.値ラベルや変数ラベルにおいて使用します.iff (# < . ), iff (@ == “Foreign”) のように条件を指定するようです.

サブコマンド目的syntax
variable変数にラベルをつけるelabel variable varname “name”
拡張するとまとめてつけられる⇒
elabel variable (varlist) (lblspec)
elabel variable varlist = fcn(arguments)
define値ラベルの定義elabel define lblname # “label” # “label” ….
拡張するとまとめてつけられる⇒
elabel define elbnamelist (varlspec) (lblspec)
elabel define elbnamelist = fcn(arguments)
values値ラベルをつけるelabel values varlist elblname
拡張することで一遍につけられる
dir値ラベルの種類を列挙するelabel dir
⇒label dirと基本的に同じだが、wildcard (* ?)が入れられる
list値ラベルの種類と選択肢を列挙するelabel list [lblname]
copy値ラベルのコピー・置き換えelabel copy oldlblname newlblname [, replace]
drop値ラベル削除elabel drop elblnamelist 
※elabel keep elblnamelist
で逆に残すことができる
save値ラベルのdo-file保存elabel save [elblnamelist] using filename [, replace]
compare値ラベルの比較elabel compare lblname1 lblname2
⇒同じならidentical、違いがあればそれを報告
duplicates重複を報告・削除elabel duplicates report [elblnamelist]
elabel duplicates remove elblnamelist
elabel duplicates retain elblname
keep値ラベルを削除せずkeepelabel keep elblnamelist
loadファイルからの値ラベルを定義するelabel load [ lblnamelist ] [ iff eexp ] using filename [ , options ]
recode値ラベルをrecodeするelabel recode elblnamelist (rule) [ (rule) … ] [ iff eexp ] [ ,options ]
※既存の値ラベルをruleに従って組み替えたりして新しいラベルを作成したりできる.
remove変数から値ラベルを削除elabel remove elblnamelist
※ _all とすればすべての値ラベルが消えます
rename値ラベル名称変更elabel rename oldlblname newlblname [ , options ]
あるいは、wildcardを使って
elabel reame (*lbl) (*)のようにすると同じ規則をもつラベル名称を一気に変更できる.

ここからは網羅的に説明するよりも、具体的な使い方に沿って説明します.実際に通常のlabelとどう違うのか、どこがどう美味しいのかを知ると魅力がわかりますからね.

使用例①変数ラベルをまとめて定義

sysuse nlsw88, clear
elabel variables age "Age" tenure "Job tenure (in years)"
 /// age, tenureという変数にラベルを付与
elabel variables (age tenure) ("Age" "Job tenure (in years)")
 /// あるいはこのように前半で(変数群)、後半で("ラベル"群)をスペースで区切ってならべる
elabel variables (_all) ("")
 /// ラベルの名前をリセット 

使用例②値と値ラベルの入れ替え、値ラベル追加

elabel define yesno 0 "yes" 1 "no"
 /// yesnoラベルをyesを0、noを1と設定
elabel define yesno (= 1-#) (= @) , modify
 /// yesを1、noを0に修正、それ以外の欠損値はそのまま
elabel define yesno (.a/.c) ("don't know" "refused" "N/A") , add
 /// 欠損値.a, .b, .cに対して、don't know, refused, N/Aというレベルを追加

あるいは、elabel recodeを使う方法もあります.

elabel define agreelbl 1 "agree" 2 "neutral" 3 "disagree"
 /// 賛成反対中立のラベルを1から3まで順につけ始める
elabel recode agreelbl (1/3 = 3/1) , define(disagreelbl)
 /// disagreeを中心にしたラベルをつける.agreeに対してdisagreeという変数をつくるとしたら、generate disagree = 4 - agreeとすればよい.それぞれのラベルをつけると一致するはず
elabel recode agreelbl disagreelbl (2 = .a "neither nor") , dryrun
 /// ラベルを変えたらどうなるかを確認.

使用例③ラベル群に共通した追加の選択肢を追加する

elabel define * .a "Refusal" .b "Don't Know" .c "Invalid Skip" .d "Valid Skip" .e "Non-Interview", add
 /// すべての変数に共通した選択肢を5つ追加.この場合は欠損ルールについて.

3.まとめ

便利コマンドelabelいかがでしたでしょうか?まだまだ使い始めたばかりなので、今後も何か画期的な用法が見つかったらまとめてみたいと思います.

コメント

タイトルとURLをコピーしました