今回も前回に引き続いて変数ラベルと値ラベルに関してまとめていきます.基本コマンドである.labelについては前回の記事で概要をまとめました。そして今回はその拡張版である.elabelについてまとめていきます.
1.コマンドを入手する
例によってこのコマンドはデフォルトでは入っていませんので、入手するところから始めましょう.
これで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 | 値ラベルを削除せずkeep | elabel 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いかがでしたでしょうか?まだまだ使い始めたばかりなので、今後も何か画期的な用法が見つかったらまとめてみたいと思います.
コメント