如何判断某个周期不存在
今天跟我妈聊了一会,刚好角度从下往上,看到她的脖子,我去,真的太吓人了,就是很多皱纹的那种,可能这段时间瘦了比较多,然后也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~~~