标签变量的循环



我正在尝试创建一个用于标记变量的循环。为此,我正在尝试使用以下宏:

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则没有。这为使用完整短语留下了更多的空间,在桌子和图表中看起来会更好。

一般原则:

  1. 与众不同的文本无助于区分。

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

当然,您必须重复键入label var,但是您最喜欢的文本编辑器应该使其变得容易。

最新更新