大白菜2012 发表于 2012-12-5 04:21 
clear
insheet using C:\Users\Desktop\big.csv, names c
非常感谢。
发帖后,我用循环整理了一个*.dta,方法就是一个一个变量分着做,每次重新引用big.csv,然后keep if var=="age dependency rate..." 这么着做完之后rename+label的。
你的group函数相当便捷, 还有这套wide-> long -> wide (j用vargp)真是通透啊!
最后rename那里想做些改善:
如果可以把一开始的var变量里的不同值提取出来存在一个(临时)向量(label)里;
然后在label的基础上,生成一个(变量名称缩写)的向量,叫acronym,
也就是说,需要一个指令能够执行提取字串中每个单词首字母的功能,
(不知道有没有Stata用户编写的类似命令,即String系列指令)。
好,现在就是生成了2个(临时)向量: label, acronym
drop var
reshape wide v, i(id year) j(vargp)
在最后就可以做个循环,用label给变量v1-v20加标签,然后再用acronym给v1-v20重命名,但是一些对应的指令不知道
foreach i of numlist 1/20{
label var v`i' "label
" %% 意会,中括号[]里面为索引
rename v`i' acronym %% 意会,不知道正确的指令怎么写
}
save done.dta,replace
。
在R里面提取不同值的指令是unique(),不知道Stata有没有类似的,或是自己编一个,利用标量——_n,_N ?
尝试了一下提取distinct values of a variable:
bysort var: gen nvals=_n==1
encode var, gen(varnum) %% transform strings to numeric type
mkmat varnum if nvals==1, nomissing matrix(label)
svmat label
结果就错了存进矩阵的字串全变成数字了,即1,……,20,就这20个,其它为.(missing values)
有啥办法没?