我正在尝试创建一个用于标记变量的循环。为此,我正在尝试使用以下宏:
local diaglbl "=1 if high blood pressure diag" "=1 if mult diag high blood press" "=1 if coronary hrt disease diag" ///
"=1 if angina diagnosis" "=1 if heart attack diag" "=1 if other heart disease diag" "=1 if stroke diagnosis" ///
"=1 if emphysema diagnosis" "=1 if chronc bronchits last 12 mths" "=1 if high cholesterol diagnosis" ///
"=1 if cancer diagnosis" "=1 if diabetes diagnosis" "=1 if joint pain last 12 months" ///
"=1 if arthritis diagnosis" "=1 if asthma diagnosis"
问题是,当我使用macro dir
检查宏时,我的外引号(仅第一个和最后一个)消失了。我尝试在开始时使用````'''和'',但它仍然不起作用。有没有办法解决此问题的方法,或者有一种更聪明的方法可以自动标记多个变量,但具有不同的标签?
也许下面的代码将指向您有用的方向。但是,在为自己书写时,我发现使用循环而不是多个单行命令编码此编码没有优势。的确,知道标签带有哪些变量的标签很尴尬,并且为犯错误打开了大门。在我关心的工作中,我会使用一条线。在我看来,循环并不简单。
上面的答案中,一位愤怒的研究人员需要在单行上定义整个宏的句子与您的newlabels
本身包含引用的字符串。下面我的代码通过使用#delimit
命令允许STATA代码的单个"行"跨越多行文本,并在其周围包裹了复合报价标记来解决问题。我将补充说,当我的代码在单独的行上显示每个标签时,您可以在每行上放置多个,就像在派生的示例中所做的那样。
clear
set obs 1
generate actlim = 1
generate age = 1
#delimit ;
local newvars
actlim
age
;
local newlabels `"
"actlim label"
"age label"
"'
;
#delimit cr
local nv : word count `newvars'
forvalues i = 1/`nv' {
local v : word `i' of `newvars'
local l : word `i' of `newlabels'
label variable `v' "`l'"
}
describe
您需要使用`'和'来界定本地宏。
local part1 `""=1 if high blood pressure diag" "=1 if mult diag high blood press" "=1 if coronary hrt disease diag""'
local part2 `""=1 if angina diagnosis" "=1 if heart attack diag" "=1 if other heart disease diag" "=1 if stroke diagnosis""'
local part3 `""=1 if emphysema diagnosis" "=1 if chronc bronchits last 12 mths" "=1 if high cholesterol diagnosis""'
local part4 `""=1 if cancer diagnosis" "=1 if diabetes diagnosis" "=1 if joint pain last 12 months""'
local part5 `""=1 if arthritis diagnosis" "=1 if asthma diagnosis""'
local diaglbl = `"`part1' `part2' `part3' `part4' `part5'"'
macro dir
在这种情况下,您确实必须在单行上定义整个宏,或者以部分进行合并,然后将部分合并如上图所示。
statalist的来源:(1),(2)
另一个答案是,这种方式的工作几乎没有明显的收益。您有几个文本字符串作为可变标签。除非您的变量名称具有非常简单的结构,否则将它们全部放入一个袋子中(这里是宏)。您什么也没告诉我们,所以我们不禁要循环浏览名称。您只需要再次将标签从包中取出即可。
一种普通但实用的方法只是要有一系列命令
label var hbp "=1 if high blood pressure diag"
label var mhbp "=1 if mult diag high blood press"
进一步假设这些是指标(虚拟)变量,例如
label var hbp "high blood pressure diag"
label var mhbp "mult high blood press"
会有所帮助,只需让您解释一下1即表示诊断,而0则没有。这为使用完整短语留下了更多的空间,在桌子和图表中看起来会更好。
一般原则:
与众不同的文本无助于区分。
循环只有在节省您的工作和时间时才好。
当然,您必须重复键入label var
,但是您最喜欢的文本编辑器应该使其变得容易。