如何从Stata程序中的tempvar获取原始值标签?

如何从Stata程序中的tempvar获取原始值标签?,stata,Stata,我有一个程序,可以做一些计算并保存一些结果矩阵。我想使用一个子程序,它从主程序传递一些参数来命名结果矩阵的列和行。在最好的情况下,数据集中原始变量的值标签应该用于矩阵的行名称。但是,在传递变量时,我不知道如何从原始变量获取值标签。在主程序中,我使用语法varname,rowvar(varname)。下面是一个示例代码: *** Sub-program name matrix rows and cols *** program namemat version 6.0 args rowvar te

我有一个程序,可以做一些计算并保存一些结果矩阵。我想使用一个子程序,它从主程序传递一些参数来命名结果矩阵的列和行。在最好的情况下,数据集中原始变量的值标签应该用于矩阵的行名称。但是,在传递变量时,我不知道如何从原始变量获取值标签。在主程序中,我使用
语法varname,rowvar(varname)
。下面是一个示例代码:

*** Sub-program name matrix rows and cols ***
program namemat
version 6.0
args rowvar

tempname rowlab tmp_min tmp_max tmp_rowlab

mat def exmat = J(13,3,0)
qui sum `rowvar'
local tmp_min = r(min)
local tmp_max = r(max)
foreach i of numlist `tmp_min' / `tmp_max' {
    local tmp_rowlab:  label (`rowvar') `i'
    local rowlab = `"`rowlab'"' + `""`tmp_rowlab'" "'
}
matrix colnames exmat = "col 1" "col 2" "col 3"
matrix rownames exmat = `rowlab'

mat list exmat
end


*** Use subprogram ***
sysuse nlsw88, clear
namemat occupation
如何从13个职业中获取原始值标签作为行名?在下一个编码步骤中,我会将过长的值标签保存在一个额外的标量中,然后将其与矩阵一起存储为rclass结果。

这对我很有用:

*** Sub-program name matrix rows and cols ***
program namemat
version 6.0
args rowvar 
mat def exmat = J(13,3,0)
sum `rowvar', meanonly 

forval i = `r(min)'/`r(max)' {
    local rowlab  `"`rowlab' "`: label (`rowvar') `i''" "' 
}
matrix colnames exmat = "col 1" "col 2" "col 3"
matrix rownames exmat = `rowlab'

mat list exmat
end


*** Use subprogram ***
sysuse nlsw88, clear
namemat occupation

编辑:您的问题是使用
tempname rowlab
,这意味着本地宏
rowlab
在生活中开始时是一个临时名称,如
\uu000000
道德:在定义本地宏时不要使用
tempname

但你已经解决了!在此之前,我得到了
\uu000000“
r2`等行名。您对
local rowlab
rowlab'
:label(
rowvar')
i''”`的小修改似乎很成功。是的;这就是问题所在。请参阅编辑。是否可以获取由
local rowlab
rowlab'
:label(
rowvar')
i''”`生成的本地宏中的第一个条目?也可以使用复合双引号?抱歉,我不明白您需要什么不同的代码。如果我使用
di
rowlab'
查看标签,我得到了
专业/技术
“经理/管理员”
“销售”、“文书/非技术人员”…
。理想情况下,第一个条目也应该和其他条目一样使用双引号。如果第一个标签包含空格,则矩阵的行名分配不正确,则这是相关的。我希望这能解释我的问题。