作者mushiue (mushiue)
看板NCHU-AE98
标题[转录]我常用到的stata命令(三)
时间Thu Nov 18 20:49:45 2010
我常用到的stata命令:
(续)
大量的虚拟变数往往是根据某个已知变数的取值生成的。比如,在某个回归中希望控制每
个观察所在的社区,即希望控制标记社区的虚拟变数。社区数目可能有成百上千个,如果
用上次的所说的方法生成就需要重复成百上千次,这也太笨了。大量生成虚拟变数的命令
如下;
ta (变数名), gen((变数名))
第一个括弧里的变数名是已知的变数,在上面的例子中是社区编码。後一个括弧里的变数
名是新生成的虚拟变数的共同首码,後面跟数位表示不同的虚拟变数。如果我在这里填入
d,那麽,上述命令就会新生成d1,d2,等等,直到所有社区都有一个虚拟变数。
在回归中控制社区变数,只需简单地放入这些变数即可。一个麻烦是虚拟变数太多,怎麽
简单地加入呢?一个办法是用省略符号,d*表示所有d字母开头的变数,另一法是用破折
号,d1-d150表示第一个到第150个社区虚拟变数(假设共有150个社区)。
还有一种方法可以在回归中直接控制虚拟变数,而无需真的去生成这些虚拟变数。使用命
令areg可以做到,它的语法是
areg (被解释变数) (解释变数), absorb(变数名)
absorb选项後面的变数名和前面讲的命令中第一个变数名相同。在上面的例子中即为社区
编码。回归的结果和在reg中直接加入相应的虚拟变数相同。
生成变数的最後一招是egen。egen和gen都用於生成新变数,但egen的特点是它更强大的
函数功能。gen可以支援一些函数,egen支援额外的函数。如果用gen搞不定,就得用egen
想办法了。不过我比较懒,到现在为止只用用取平均、加和这些简单的函数。
有的时候资料情况复杂一些,往往生成所需变数不是非常直接,就需要多几个过程。曾经
碰到原始资料中记录日期有些怪异的格式。比如,1991年10月23日被记录为19911023。我
想使用它年份和月份,并生成虚拟变数。下面是我的做法:
gen yr=int(date)
gen mo=int((data-yr*10000)/100)
ta yr, gen( yd)
ta mo, gen( md)
假设你已经生成了所有需要的变数,现在最重要的就是保存好你的工作。使用的命令是
save空格(档案名),replace。和前面介绍的一样,replace选项将更新你对资料库的修
改,所以一定要小心使用。最好另存一个新的资料库,如果把原始库改了又变不回去,就
叫天不应叫地不灵了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.120.95.44