楼主: 十步天下
3519 17

[其他] 100 论坛币求助一个stata小问题 [推广有奖]

11
jzhyue 发表于 2011-10-12 19:59:42
sungmoo 发表于 2011-10-12 16:42
*设第1个变量是a:
egen aa=max(a*(sum(a[_n]!=a[_n-1])==2))
*画蛇添足的考虑:对变化值刚好是两个正负数:比如
1   1  2  1
1   2  1  1
-1   2  1  1
-1  1  2  1
1   1  1  2可能会出现不妥。如果加abs(),正负1将认为同一值.
当然对楼主的数据可能没有此担忧。

已有 1 人评分经验 收起 理由
十步天下 + 100 观点有启发

总评分: 经验 + 100   查看全部评分

12
jameschow 发表于 2011-10-12 20:01:50
kankan

13
jameschow 发表于 2011-10-12 20:02:04
看看

14
herbertzhao 发表于 2011-10-14 07:13:51
其实对每一个变量,不算打扫(比如drop临时变量),只有三个步骤而已(一个gen,一个egen,一个replace),这还是考虑到有可能需要用非第一次的变化来填充(不然的话egen可以省略), 没什么进一步简化的余地了啊。。。。foreach只是在looping over all variables罢了。local也是为了指定用第几次变化填充才需要的。

15
foryoualone 发表于 2011-10-14 09:40:04
受教了

16
sungmoo 发表于 2011-10-14 20:17:06
herbertzhao 发表于 2011-10-14 07:13   没什么进一步简化的余地了啊
还是可以减少命令行吧?

17
jzhyue 发表于 2011-10-15 18:40:04
sungmoo 发表于 2011-10-12 16:42
*以下可以克服正负数杂存的问题(不需要额外手工操作):

foreach v of var _all{
个人认为10#为最佳。
问题的关键是三个:1、找到它、标记它,张贴它。
sungmoo的高明之处在于综合利用函数实现它。

18
herbertzhao 发表于 2011-10-16 02:28:41
sungmoo 发表于 2011-10-14 20:17
还是可以减少命令行吧?
如果纯粹为了减少行数肯定还是可以的。不过我觉得为了程序的可读性,也为了以后自己修改的时候方便,不用特意精简行数。不过这个只是个人习惯罢了。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-16 03:02