2013-11-21 87 views

回答

6

更換str18這可能是

gen state_year = state + "_" + string(year) 

在那裏我假設year是數字。或者它可以是

egen state_year = concat(state year), p(_) 

它負責所需的任何類型轉換。

或者它可能是

egen state_year = group(state year), label 

不給你一個連接下劃線。這提出了一個關鍵點:爲什麼你認爲你需要這個下劃線?它只會在圖表或表格上看起來很醜。如果空間(被認爲是一個問題),那麼「North Carolina_2013」​​等等呢?

對於這個問題的一個縮影綜述見http://www.stata-journal.com/sjpdf.html?articlenum=dm0034

5

下面是一個例子:

// create some example data 
clear 
input /// 
str13 state  int year 
"Noord-Holland" 1962 
"Zuid-Holland" 1963 
"Utrecht"  1964 
"Zeeland"  1965 
"Noord-Brabant" 1966 
"Limburg"  1967 
"Gelderland"  1968 
"Flevoland"  1969 
"Overijsel"  1970 
"Drente"   1971 
"Friesland"  1972 
"Groningen"  1973 
end 

// create the variable 
gen str18 state_year = state + "_" + string(year) 

// admire the result 
list  

如果出現2串之間的+操作,那麼就意味着Stata的具有以連接兩個字符串。

因此,部分state + "_"表示在字符串變量state的內容之後添加字符串"_"。爲了確保+也意味着連接部分"_" + string(year),我使用了string()函數,該函數將變量year的數值變成字符串。

str18部分表示您希望變量state_year爲包含18個字符的字符串。這個例子適用於荷蘭國家,但是您需要計算最長名稱狀態下的字符數,然後加上5來確定您的情況下字符串的最大長度。說這個數字是21,那麼你就需要用str21

1

一個除了尼克的解決方案。如果狀態變量存儲爲數字與值標籤(例如1 "Alabama" 2 "Alaska"等),我相信你也將需要指定decode選項,從而將標籤轉換成字符串:

​​