(答案原來的問題)
我從來沒有使用SAS,但在胡亂猜測你想要的東西像
foreach v in A B C D {
gen test`v' = 0.5 * (`v' == 1) + 0.6 * (`v' == 2) + 0.7 * (`v' == 3)
}
或
foreach v in A B C D {
gen test`v' = cond(`v' == 1, 0.5, cond(`v' == 2, 0.6, cond(`v' == 3, 0.7, .)))
}
但掛;這中間線也像
gen test`v' = (4 + `v')/10
這可以通過各種方式來完成(答案完全不同的經修訂的課題)
。正如上面你可以有一個循環
foreach v in A B C D {
gen test`v' = 0.5 * `v' if `v' == 1
replace test`v' = 31 - `v' if `v' == 2
replace test`v' = `v' - 2 if `v' == 3
}
的問題說:「我想的是,本機‘程序’,因爲它不能把變量作爲輸入/輸出在Stata命令是不適合這種類型的問題。」這種猜測完全不正確。你也可以寫一個程序來做到這一點。這個例子是原理圖,不是確定性的。真正的程序會包含更多檢查和錯誤消息以匹配任何不正確的輸入。有關詳細建議,您確實需要閱讀文檔。在SO上的一個答案不能告訴你所有你需要知道甚至編寫簡單的Stata程序。無論如何,這個例子顯然是無足輕重和/或不完整的,所以一個完整的工作例子將是毫無意義的或不可能的。
program myweirdexample
version 13
syntax varlist(numeric), Generate(namelist)
local nold : word count `varlist'
local nnew : word count `generate'
if `nold' != `nnew' {
di as err "`generate' does not match `varlist'"
exit 198
}
local i = 1
quietly foreach v of local varlist {
local new : word `i' of `generate'
gen `new' = 0.5 * `v' if `v' == 1
replace `new' = 31 - `v' if `v' == 2
replace `new' = `v' - 2 if `v' == 3
local ++i
}
end
關於術語的腳註:該問題使用的術語功能比在Stata中使用得更廣泛。在Stata中,命令和功能是不同的; 「功能」不是命令的同義詞。
第二個腳註:查看recode
。這可能是你需要的,但最好將整數代碼映射到其他整數代碼。
第三個腳註:所需檢查的一個示例是generate()
的參數應該是合法和新的變量名稱。
我建議你多解釋一下你在這裏做什麼。代碼轉換顯式不在StackOverflow的主題上;相反,請提出足夠詳細的問題,以便[tag:stata]程序員可以在不知道SAS的情況下回答您的問題,並將SAS代碼放在其中,僅僅爲了知道兩者都知道的人添加詳細信息。 – Joe