【发布时间】:2017-06-12 14:06:48
【问题描述】:
已编辑此问题以添加示例数据并清理(希望)每个反馈的一些不必要的步骤。
我从宽格式的纵向数据开始。我需要对多个不同的数据块进行子集化、重塑和执行汇总步骤。我想用 varlists 创建宏变量,以便以宽格式和长格式进行整形和其他重复步骤。被重构的变量遵循一致的命名模式(prefix)_(name)_#。还有一些遵循相同模式的变量不需要重新整形,还有一些变量是时不变的并遵循其他命名约定。生成样本数据:
set obs 1
foreach t in 0 6 15 18 21 {
foreach w in score postint postintc constime starttime {
gen p_`w'_`t' = 1
}
}
gen p_miles_0 = 1
gen p_hea_0 = 1
gen cons_age = 1
ds
我想创建两个宏变量 1) wide_varlist 用于变量以数字结尾的宽格式数据和 2) uniquestubs 用于宏列表仅包含存根的长格式数据。我无法使用宏列表扩展函数“uniq”在此处生成#2。到目前为止,这是我的代码。我的完整变量列表实际上要长得多。
使用宽格式 varlist 创建宏的步骤:
/* create varlist for wide format data a time point 0,6,15,18,21 */
ds p_score_* p_postint_* p_postintc_* p_constime_* p_starttime_*
di "`r(varlist)'"
global wide_varlist `r(varlist)'
开始使用长格式 varlist 创建宏:
/*copy in wide format varlist*/
global stubs "$wide_varlist"
/*remove # - this results in a macro with 5 dups of same stub*/
foreach mo of numlist 0,6,15,18,21{
global stubs : subinstr global stubs "`mo'" "", all
}
/*keep unique stubs*/
global uniquestubs : list uniq stubs
在global uniquestubs : list uniq stubs 之前,上面的一切都按我的意图工作,它根本不会创建宏uniquestubs。
我的情况似乎与this question 类似,但同样的解决方案对我不起作用。
有什么想法吗?感谢帮助。
【问题讨论】:
标签: list unique stata stata-macros