SAS编程

如何判断某个周期不存在

2021-07-31  本文已影响0人  SASPRO的打工人生活

今天跟我妈聊了一会,刚好角度从下往上,看到她的脖子,我去,真的太吓人了,就是很多皱纹的那种,可能这段时间瘦了比较多,然后也56岁了。心里感慨万千,好在脸看起来还是很饱满,皱纹也看不出来。

以前我妈也是一个大胖子,但是随着年龄的增加,加上一些疾病,导致越来越瘦了,现在对赚多赚少不是那么在意了,只希望父母家人和自己身体健康就好了。

这几天遇到一个问题,就是对于肿瘤评估,如何判断某一个周期是否按照计划进行?有一点需要注意:

不能只对数据集里存在的周期进行判断,比如说进行到96周了,但是后续肯定还是需要进行评估的,如果后面来了新数据,不是又得去修改吗?

同时假设第一年每8周进行一次评估,第二年每12周进行一次评估,这在编程的时候也是需要注意的。

我的思路是求出每个受试者目前进行到的最大周期,然后反推出之前应该出现哪些周期,最后理应出现周期的数据集和原始数据集一merge,就会出现日期为空的观测,最后筛选出这些空的观测就是本来应该进行的评估周期。

程序如下:

data test;

input id $ tuweek :$9. tudat :$19.;

cards;

001 周期1  2021-07-30

001 周期8 2021-07-30

001 周期16 2021-07-30

001 周期24 2021-07-30

001 周期32 2021-07-30

002 周期1 2021-07-30

002 周期8 2021-07-30

002 周期16 2021-07-30

002 周期24 2021-07-30

002 周期48 2021-07-30

002 周期60 2021-07-30

002 周期72 2021-07-30

002 周期84 2021-07-30

002 周期96 2021-07-30

002 周期108 2021-07-30

003 周期1 2021-07-30

003 周期16 2021-07-30

003 周期24 2021-07-30

003 周期32 2021-07-30

004 周期1 2021-07-30

;

run;

data test2;

set test;

number=input(compress(tuweek,,"kd"),best.);

run;

proc sql noprint;  **求出数据集中出现的最大周期,之后反推理应进行的周期;

create table countt as

select id ,max(number) as count from test2

group by id;

quit;

proc sort nodupkey data=test2 out=test3;

by id ;

run;

**根据最大周期算出每个受试者应该出现的周期,同时受试者以后可能还会有肿瘤评估,所以不要指定周期,否则每次都得改;

data test4;

merge test3(keep=id) countt;

by id ;

if count>48 then do; **大于一年每12周进行一次评估;

do num=0 to 48 by 8;

output;

end;

do num=60 to count by 12;

output;

end;

end;

else do;

do num=0 to count by 8; **小于一年每8周进行一次评估;

output;

end;

end;

run;

data test5;

length tuweek $9.;

set test4;

tuweek="周期"||strip(put(num,best.));

if tuweek="周期0" then tuweek="周期1";

proc sort;by id tuweek;

run;

proc sort data=test;by id tuweek;run;

data test6;

merge test test5;

by id tuweek;

run;

-----------------------------------------------

哎,了解跳槽之后的同事的工资,真的太羡慕和心动了,我感觉如果拿到ta那个工资,每个月可以存到1万+,日子也不用过的坑坑巴巴的。工作两年多了,啥自由都没实现!连点个外卖还得挑三拣四的,选配送费少的甚至没有的,选红包金额大的!yue~~~

上一篇下一篇

猜你喜欢

热点阅读