2013-06-25 41 views
0

使用forval循環,我合併了一個包含400個單獨數據集的列表。這些數據集可以是10個不同的值之一(由數據集中的變量定義):根據數據集,我將merge與不同的數據集。例如,如果玩家90是類型9,我想要合併Type_9.dta而不是Type_8或Type_7。在Stata forval循環中包含一個可變的本地宏

我想是這樣的:

forval x = 1/400 { 
    use "player_`x'.dta" 

    * some way to turn the value of player type into a local macro l * 

    merge 1:1 using "type_`l'.dta" 
} 

如何獲取變量類型成每種類型通過循環會改變宏觀任何想法?

+0

下面的答案有幫助嗎? –

回答

1

您的數據結構和最終目標對我來說不是很清楚,所以可能有更有效的方法來做到這一點。

如果player_type在每個player_ *數據集內沒有變化,則可以使用levelsof。這具有如果player_type由於諸如數據輸入錯誤等原因而變化的特徵,則循環將會出錯。

forvalues x = 1/400 { 
    use "player_`x'.dta" 
    levelsof player_type, local(l) 
    merge 1:1 **some_id_var** using "type_`l'.dta" 
} 
+0

這對我來說還不清楚:例如,如果您已經合併了一個數據集,那麼又該怎麼辦?但是,如果'player_type'是常量,那麼使用'player_type [1]'的值就足夠了,所以不需要激發'levelsof'。 –

+0

我使用了'levelsof',因爲如果'player_type'事實上並不是常量,循環就會中斷。 –

+1

好;我現在看到了。最好在修改你的答案時說出來。 –