2017-03-06 127 views
0

我有兩個變量message_one和message_two。添加一個對應於每個循環的循環變量的變量

在循環變量時,如果「vari」是varone,我想顯示message_one,如果「vari」是vartwo,則顯示message_two。

我想要做的是不同的,但這是一個例子。

我正在做以下事情,它不起作用。

foreach vari in varone vartwo { 

local suffix "one" if `vari'==varone 
local suffix "two" if `vari'==vartwo 

display(message_`suffix') 

} 

如何更改本地線路使其工作?

也就是說,我想添加一個對應於每個循環的循環變量的變量。

回答

1

if條件在這裏不起作用。一般來說,它確定了滿足某些條件的觀測值。特別是,因爲在將內容分配給宏時沒有隱含的循環觀察,所以這沒有意義作爲限定local。所以,你的語法可能會產生一個非法的語法消息(「不起作用」永遠不是一個精確的問題報告)。

但是,注意,像

local foo if 2 == 2 

的效果僅僅是文本if 2 == 2複製到本地宏foo

你想要什麼也許更像

foreach vari in varone vartwo { 
     di cond("`vari'" == "varone", "one", "two") 
} 

但這個循環是沒有意義的單一直接表態足以:

di "one" _n "two" 

你可以這樣做,而不是:

foreach vari in varone vartwo { 
     if "`vari'" == "varone" di "one" 
     else di "two" 
} 

這裏的if命令與完全不同限定符。我不得不猜測你在這裏想要什麼。

首先,我在希望直接比較字符串的推測上添加了雙引號。如果你想要別的東西,請解釋一下。

其次,像

display(message_one) 

聲明將工作當且僅當message_one是一個預定義的變量(在這種情況下,你會看到它的值顯示在第一觀察)或一個預定義的標量。但是,在一個變量存儲單個文本消息是不必要的,尤其是如果相同的文字被用在了所有的觀察,因爲這將是與像

gen foo = "this message" 

在Stata不是定義標量的好方法。在程序中將一條消息定義爲文本字符串幾乎總是最簡單最好的。

你問什麼顯然是你的真正問題的最小版本,但同樣我不知道真正的問題是什麼。