此问题已被编辑为添加示例数据和清理(希望)每个反馈的一些不必要的步骤。Stata宏列表uniq扩展函数(删除宏var列表中的重复项)
我从广泛的纵向数据开始。我需要对多个不同的数据块进行子集,重塑和执行摘要步骤。我想创建宏变量与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时遇到了问题。这是我的代码到目前为止。我的全部varlists实际上更长。
步骤来创建宏与宽幅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但同样的解决方案对我无效。
有什么想法?感谢帮助。
谢谢尼克。对于难以表达的内容表示歉意,并感谢您生成示例数据。是的,我确实需要用于“重塑”的存根,以及稍后运行汇总统计信息的其他步骤(因此更倾向于全局性)。数据集中还有其他一些变量可以通过p _ * _ 0得到,我不想在这个存根列表中找到它。这个例子的'uniq'扩展函数是否会以任何方式工作(抛开我的冗余编码)?只是试图理解这个功能,并不能使用Stata手册或以前的问题搞清楚。 – jrc
所以,你需要修改你喂食的东西,然后再进行一些手术以消除你不想要的东西。我不能提供代码,因为你的信号只是你真正的问题比你说的更复杂。对不起,我无法理解你想用'uniq'做什么。目前我缺乏提出两种解决方案的热情。 –
否则,这是僵局。理解我的代码并不是完全按照你想要的去做的,但除非你直到你解释了什么是缺少的东西,否则在疯狂地猜测如何修改这个解决方案或者推荐另一个似乎没有意义的东西,相同的示例变量名称。 –