2017-10-03 5 views
0

現在、オープンデータキットであるODKを通じて生成されたStataでデータセットを処理しています。 複数の回答で質問に回答するオプションがあります。例えば。私のアンケートで「あなたはどちらの資産を所有していますか?」インタビュアーは20のオプションの中からすべての回答をタグ付けしました。これは数百の参加者を分析することは困難であるとして は、この私のために、このような1つ以上を2桁に変換する

"1 2 3 5 11 17 20" 
"3 4 8 9 11 14 15 18 20" 
"1 3 9 11" 

などのコンテンツを持つ文字列変数を生成し、私は答えの選択肢のそれぞれについて、1または0を作成し、新たな変数を生成したかったです。 I変数hou_as_1を生成しようとした可変hou_asについて 、hou_as_2等次のコードで:一桁について

foreach p in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { 
local P : subinstr local p "-" "" 
gen byte hou_as_`P' = strpos(hou_as, "`p'") > 0 
} 

これは、もしあれば可変hou_as_1も1で満たされているという問題をもたらしますオプション1が選択されていなくても、10 11 12 ... 19が満たされます。同様にhou_as_2は、オプション2,12または20がチェックされたときに入力されます。 この問題を回避するにはどうすればよいですか?

答えて

1

20個の指標またはダミー変数が必要です。最初に、ループ1(1)20にはforvalを使用するほうがはるかに簡単であることに注意してください。

forval j = 1/20 { 
    gen hou_as_`j' = 0 
} 

は0

として、私は単語がスペースで区切られているだけで何でもここにいる、それはあなたの答え変数の言葉をループするのが容易だと思う20個のこのような変数を初期化します。そこでは、ほとんどの20個の言葉があり、それは少しの粗が、みんなでそれを入れて、あなたの例でそれを試してみましょう

forval j = 1/20 { 
    forval k = 1/20 { 
     replace hou_as_`j' = 1 if word(hou_as, `k') == "`j'" 
    } 
} 

に行くのに十分な速である可能性が高い:

clear 
input str42 hou_as 
"1 2 3 5 11 17 20" 
"3 4 8 9 11 14 15 18 20" 
"1 3 9 11" 
end 

forval j = 1/20 { 
    gen hou_as_`j' = 0 
    forval k = 1/20 { 
     replace hou_as_`j' = 1 if word(hou_as, `k') == "`j'" 
    } 
} 

だけ表示するようにそれが働いていること:

. list in 3 

    +----------------------------------------------------------------------------+ 
    3. | hou_as | hou_as_1 | hou_as_2 | hou_as_3 | hou_as_4 | hou_as_5 | hou_as_6 | 
    | 1 3 9 11 |  1 |  0 |  1 |  0 |  0 |  0 | 
    |----------+----------+----------+----------+----------+----------+----------| 
    | hou_as_7 | hou_as_8 | hou_as_9 | hou_a~10 | hou_a~11 | hou_a~12 | hou_a~13 | 
    |  0 |  0 |  1 |  0 |  1 |  0 |  0 | 
    |----------+----------+----------+----------+----------+----------+----------| 
    | hou_a~14 | hou_a~15 | hou_a~16 | hou_a~17 | hou_a~18 | hou_a~19 | hou_a~20 | 
    |  0 |  0 |  0 |  0 |  0 |  0 |  0 | 
    +----------------------------------------------------------------------------+ 

ところで、あなたのライン

local P : subinstr local p "-" "" 

は役に立ちません。ローカルマクロpは整数桁の内容しか持たないため、削除する句読点はまったくありません。

this explanation

. search multiple responses, sj 

Search of official help files, FAQs, Examples, SJs, and STBs 

SJ-5-1 st0082 . . . . . . . . . . . . . . . Tabulation of multiple responses 
     (help _mrsvmat, mrgraph, mrtab if installed) . . . . . . . . B. Jann 
     Q1/05 SJ 5(1):92--122 
     introduces new commands for the computation of one- and 
     two-way tables of multiple responses 

SJ-3-1 pr0008 Speaking Stata: On structure & shape: the case of mult. resp. 
     . . . . . . . . . . . . . . . . . . . . . . . . N. J. Cox & U. Kohler 
     Q1/03 SJ 3(1):81--99         (no commands) 
     discussion of data manipulations for multiple response data 
を参照してください。
関連する問題