sas - SAS数据步骤是否可以在变量更改时添加记录计数列?
问题描述
我有一张表,其中包含日期,并且成员会随着时间而变化。我想知道成员何时开始和结束。如果成员开始和结束,然后重新启动,则需要使用不同的指示器。
我所拥有的样本(对不起,我不知道如何在这里制作表格):
member yyyymm
Jim 201603
Jim 201606
Jim 201609
Bob 201709
Bob 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;
我所希望的:
member yyyymm id
Jim 201603 1
Jim 201606 1
Jim 201609 1
Bob 201709 2
Bob 201712 2
Jim 201803 3
Jef 201806 4
Jef 201809 4
解决方案
proc sort data=have;
by yyyymm member;
data want;
set have;
by yyyymm member;
if first.member then id+1;
run;
推荐阅读
- android - 如何在其他 Android 手机上启用 ARCore
- python - python中2个日期之间的差异
- android - React Native:BLE,发现和广播(广告数据)
- javascript - JSON stringify 在有空格或非字母字符时创建下划线,为什么?
- gnuplot - gnuplot:如何避免使用填充曲线缩放到 0?
- c# - 将文件Linux服务器保存到Windows服务器时找不到路径c#的一部分
- mysql - My SQL 存储过程中的 ELSEIF 异常
- html - 如何更改 matInput 占位符的字体颜色
- dropwizard - 在 Dropwizard 2.x 中注册 ContainerRequestFilter 的推荐方法是什么?
- r - 使用 r 从 dataPreparation 包中使用 whichAreBijection 命令识别的数据框中自动删除双射列