标签变量循环
我正在尝试为标签变量创建一个循环。对于这一点,我想用下面的宏:标签变量循环
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
宏。我在开始时尝试使用`“,最后使用”',但它仍然不起作用。有没有办法解决这个问题,还是有更智能的方法来自动标记多个变量,但是标签不同?
回答:
您将需要使用`“和”'分隔本地宏。
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
反复,但你喜欢的文本编辑器应该那么容易。
回答:
也许下面的代码会指出你有用的方向。然而,在为我自己写的代码中,我发现用循环代码而不是多个单行命令没有什么好处。事实上,知道什么标签与什么变量一起使用是非常尴尬的,并且打开犯错的大门。我会在我关心的工作中每条命令使用一行。在我看来,循环并不简单。
the answer above from one angry researcher中关于需要在一行上定义整个宏的语句与您的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
以上是 标签变量循环 的全部内容, 来源链接: utcz.com/qa/267030.html