2015-10-22 304 views
0

假設我有60個變量,但沒有一個具有相似的命名模式。我想將標籤分配給我本地存儲的所有變量。因此,例如Stata:用循環將變量分配給一系列變量

local mylabels "dog cat bird" 

但是,我正在努力與循環的確切表達式。我是否需要全局存儲變量範圍,然後使用foreach?或者我使用forvalues?

編輯:我指的是變量標籤。我設法創建了一個循環,類似於這裏使用的方法http://www.stata.com/support/faqs/programming/looping-over-parallel-lists/。然而,我遇到了一個更困難的問題:我的變量沒有特定的命名模式,標籤有特殊字符(空格,逗號,%-signs),這裏是我的循環不起作用。

一些示例數據(請原諒隨機性):

gen Apples_ts_sum = . 
gen Pears_avg_1y = . 
gen Bananas_max_2y = . 

還有一些例如標籤:

「時間序列的蘋果,總和%」, 「梨的平均,1年以上」 「最多香蕉,超過2年「。

我遇到了由尼克考克斯此項:http://www.stata.com/statalist/archive/2012-10/msg00285.html和嘗試應用所提到的括號方法,像這樣:

local mylabels `" "Time series of apples, sum, %" "Average of pears, over 1 year" "Maximum of bananas, over 2 years" "' 

,但不能得到它的工作。

+1

標籤是指價值標籤嗎?變量標籤?可能是第二個,但是如果你不顯示代碼,那麼最簡單的期望就是你展示了你的數據的外觀。 –

+0

感謝編輯澄清了這一點。一般來說,如你所發現的,將所有變量標籤放入一個本地宏的方法會帶來再次將它們取出的問題。交互式使用'varm'可以很容易,或者如果您更喜歡直接重複的研究來創建一個一個地定義變量標籤的do-file。 –

回答

1

如果要將所有變量標記爲相同的東西,例如"dog cat bird",那麼可以使用describe命令的varlist選項。假設您的60個變量通常可以用表達式EXP列出。然後:

qui des EXP, varlist 
    foreach variable in `r(varlist)'{ 
     label var `variable' "dog cat bird" 
    } 

編輯: 以你的數據。例如,我創造了另一個地方包含變量名。

local myvar `" "Apples_ts_sum" "Pears_avg_1y" "Bananas_max_2y" "' 
local mylabels `" "Time series of apples, sum, %" "Average of pears, over 1 year" "Maximum of bananas, over 2 years" "' 
forval n = 1/3{ 
    local a: word `n' of `mylabels' 
    local b: word `n' of `myvar' 
    di "variable `b', label `a'" 
    label var `b' "`a'" 
} 

請注意,我手動創建了變量列表。您可以使用上面列出的方法自動創建此列表,其中des, varlist

qui des , varlist 
foreach var in `r(varlist)'{ 
    local myvar_t "`myvar_t' `var'" 
} 

然後,您可以使用本地myvar_t,而不是myvar在上面的例子。

+0

OP對於所有變量都想要相同的變量標籤似乎最不可能。但是如果是這樣,'describe'在這裏是不必要的,因爲'foreach var EXP'就足夠了。但是,OP尚未澄清問題。 –

+0

這是真的。如果每個變量的標籤應該不同,並且沒有系統的相似性,那麼我無法想象一些不是手動的。 – Julien

+1

我瘋狂地猜測OP已經把很多變量標籤放入宏中,現在又想把它們取出來,但是猜測是徒勞的;畢竟,它可能是價值標籤。 OP有責任明確要求什麼。 –