假設我有以下數據集:塔塔:打開一個變量爲多個,每個爲價值或0
clear
input SubjectID DecisionID AltID my_alpha
1 1 1 0.4
1 1 2 0.4
1 2 1 0.6
1 2 2 0.6
2 1 1 0.8
2 1 2 0.8
2 2 1 0.5
2 2 2 0.5
end
我要創建的是取決於my_alpha
價值AltID
每個值的新變量。在這種情況下,現在會有AltID_alpha_1
和AltID_alpha_2
。當AltID
爲1
時,AltID_alpha_1
將等於my_alpha
,否則等於0
。類似地,當AltID
等於2
時,AltID_alpha_2
將等於my_alpha
,否則等於0
。也就是說,它應該看起來像這樣:
| SubjectID | DecisionID | AltID | my_alpha | alpha_AltID_1 | alpha_AltID_2 |
| 1 ------------ | 1 ------------ | 1 ----- | 0.4 -------- | 0.4 --------------- | 0 ----------------- |
| 1 ------------ | 1 ------------ | 2 ----- | 0.4 -------- | 0 ----------------- | 0.4 --------------- |
| 1 ------------ | 2 ------------ | 1 ----- | 0.6 -------- | 0.6 --------------- | 0 ----------------- |
| 1 ------------ | 2 ------------ | 2 ----- | 0.6 -------- | 0 ----------------- | 0.6 --------------- |
| 2 ------------ | 1 ------------ | 1 ----- | 0.8 -------- | 0.8 --------------- | 0 ----------------- |
| 2 ------------ | 1 ------------ | 2 ----- | 0.8 -------- | 0 ----------------- | 0.8 --------------- |
| 2 ------------ | 2 ------------ | 1 ----- | 0.5 -------- | 0.5 --------------- | 0 ----------------- |
| 2 ------------ | 2 ------------ | 2 ----- | 0.5 -------- | 0 ----------------- | 0.5 --------------- |
的問題是,在我的實際數據,我有超過一百萬的觀測,爲AltID
5151倍的值,需要(至少)創建兩個my_alpha
和my_beta
變量。我需要一種「快速」的方法。
我嘗試使用foreach
循環來創建變量,但在運行了20個小時後(我的桌面上有24 GB RAM),我不得不將其關閉。我能夠使用命令quietly tab AltID, gen(alpha_AltID_)
在適當的位置獲得0
,在其他地方獲得1
的其他地方,這隻需要幾秒鐘,但是然後我需要一個循環,用適當的值代替所有的1
,這似乎是大約需要兩個小時(以目前的速度)。有沒有人有更省時的解決方案?
我編輯了你的第一個列表,這是有道理的,但包含不相關的字符,更方便的導入。 –