楼主: vincent829
5549 29

[其他] 怎么标记event month? [推广有奖]

21
sungmoo 发表于 2009-8-10 11:40:25
vincent829 发表于 2009-8-10 11:32 不是相隔,是想标记event month,从1开始,1之前的都想删除
同月(标记为0),是否删除?

22
sungmoo 发表于 2009-8-10 11:41:41
使用14楼的程序后,再删除m为负数(或非正数)的观测值即可。

23
voodoo 发表于 2009-8-10 11:58:10
sungmoo 发表于 2009-8-10 00:15
*若想求出sheet2中各月与event-month相隔的自然月数(负数表示之前,正数表示之后,0表示同月),只需

use sheet1,clear
ren eventmonth time
append using sheet2
sort id time year
g t=time if year==.
by id: egen x=min(t)

g m=(int(time/100)-int(x/100))*12+mod(time,100)-mod(x,100)
drop t x
keep if year
上述加粗那几段程序迂回实现了merge id using sheet1的工作。

use sheet2,clear
// drop year month
sort id
                                // 用mege id using sheet1, sort,提示出错
merge id using sheet1    // 而先sort后merge的方法则只是警告
keep if _merge == 3
drop _merge
sort id time

g m=(int(time/100)-int(eventmonth/100))*12+mod(time,100)-mod(eventmonth,100)   // sungmoo的这种方法就无需time和eventmonth为%tm格式,妙极!
巫毒上传,必属佳品!
坛友下载,三思后行!

24
sungmoo 发表于 2009-8-10 12:48:59
voodoo 发表于 2009-8-10 11:58
use sheet2,clear
// drop year month
sort id
                                // 用mege id using sheet1, sort,提示出错
merge id using sheet1    // 而先sort后merge的方法则只是警告
keep if _merge == 3
drop _merge
sort id time
奇怪。

我这里,

(sort id)
merge id using sheet1

提醒出错信息,并且不进行任何操作。

25
vincent829 发表于 2009-8-10 15:34:09
24# sungmoo
需要把sheet1和sheet2标识时间的变量起2个不同的名字

26
vincent829 发表于 2009-8-10 15:57:24
23# voodoo
这个程序很好用,谢谢

27
sungmoo 发表于 2009-8-10 18:54:27
vincent829 发表于 2009-8-10 15:34 需要把sheet1和sheet2标识时间的变量起2个不同的名字
可否把你进行的操作帖出来?

28
voodoo 发表于 2009-8-10 22:43:21
#27 sungmoo

我把数据也贴上来,你看看和你的sheet1和sheet2有什么区别。

data.rar
下载链接: https://bbs.pinggu.org/a-378152.html

5.52 KB

本附件包括:

  • sheet2.dta
  • sheet1.dta

巫毒上传,必属佳品!
坛友下载,三思后行!

29
sungmoo 发表于 2009-8-10 23:21:04
voodoo 发表于 2009-8-10 22:43 我把数据也贴上来,你看看和你的sheet1和sheet2有什么区别。
区别在于:

你的sheet1已经对id做了升序排序;

我的sheet1是楼主excel表sheet1的原始形式(未对id排序)。

两者的这种区别,使得对我的文件使用你的命令组时总出现错误,而对你的文件使用你的命令组时可以执行。

30
vincent829 发表于 2009-8-11 10:38:37
这是我的程序命令,我是以sheet 2作为master data,sheet 1作为using data
sheet 2中时间序列是d,sheet 1|中标识时间的变量是event_time
merge id using **.dta, uniqusing sort
drop if _merge==2
g em=(int(d/100)-int(event_month/100))*12+mod(d,100)-mod(event_month,100)
drop if em<=0
drop _merge event_month

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

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