SAS数据步骤是否可以通过添加变量来更改记录计数列?

时间:2019-05-31 20:43:36

标签: sas

我有一张桌子,上面有日期,并且该成员随时间变化。我想知道成员的开始和结束时间。如果该成员开始和结束然后重新启动,则需要使用其他指示符。

我所拥有的样品(对不起,我不知道如何在此处制作桌子):

成员yyyymm

Jim 201603

Jim 201606

201609年7月

鲍勃201709

鲍勃201712

Jim 201806

Jef 201806

Jef 201809

我尝试了proc sql语句,该语句查找最小和最大日期,但是如果成员重新启动,则最大日期错误(下面的代码A)。我还尝试了一个数据步骤,并说该数据未正确排序(下面的代码B)

代码A

proc sql;
create table tst as
select
member,
max(yyyymm) as effective_until,
min(yyyymm) as effective_from
from tbl
group by 1,2;
quit;

代码B

data tst;
count + 1;
by member;
if first.member then count = 1;
run;

我希望的是

成员yyyymm ID

Jim 201603 1

2016年7月1日1

201609年1月1日

鲍勃201709 2

鲍勃201712 2

Jim 201803 3

Jef 201806 4

2018年9月4日

2 个答案:

答案 0 :(得分:0)

proc sort data=have;
  by yyyymm member;

data want;
  set have;
  by yyyymm member;
if first.member then id+1;
run;

答案 1 :(得分:0)

因此,请尝试从先前调用返回参数的lag函数。因此,这里它返回上一次观察的值(但要小心处理)。当成员不同于上次观察时,只需更改您的ID。例如,添加1。

data have;
length member $3 yyyymm $6; 
input member yyyymm;
cards;
Jim  201603
Jim  201606
Jim  201609
Bob  201709
Bob  201712
Jim  201806
Jef  201806
Jef  201809
run;

data want;
  set have;
  if lag(member)^=member then id+1;
run;