标签变量循环

我正在尝试为标签变量创建一个循环。对于这一点,我想用下面的宏:标签变量循环

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表示不。这为使用完整短语留下了更多空间,在表格和图表中看起来会更好。

一般原则:

  1. 文本是相同无助于区分。

  2. 循环只有在节省您的工作和时间时才有用。

当然,你必须键入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

回到顶部