工作小技巧

267:工作中解决问题的一些思路和实现方法

2023-09-08  本文已影响0人  SASPRO的打工人生活

一:

最近在处理DA-EX-EC之间的联系,因为要计算用药依从性。

假设分3个阶段用药,第一个阶段持续7天,每天吃1片;第二个阶段也是持续7天,每天吃药2片;第三个阶段持续10天,每天3片。

如果受试者依从性很好,每天都按时按需服药,那对于我们编程来说很友好,但是我们知道这几乎不可能,很可能受试者第一阶段就吃6天,少吃了,第二阶段又吃了8天,多吃了。总之就是在不同阶段都有“叛逆性”。

在计算依从性的时候,一开始的要求是6天按1片算,第二阶段也要拿出一天纳入第一阶段,但是片数是按2片算大家可以看下数据集。如果最后的研究天数超过规定的研究天数,超过的部分不纳入计算。

如果按照规定的天数服药,标准的EXSTDY和EXENDY分别是:

VISIT="Phase I";EXSTDY=1;EXENDY=7;

VISIT="Phase II";EXSTDY=8;EXENDY=14;

VISIT="Phase III";EXSTDY=15;EXENDY=24;

所以如果出现图中那样不“标准”的研究天数怎么处理呢?第一想法就是新建3个变量(或者6个变量),比如EXSTDY_1=1;EXENDY_1=7;EXSTDY_2=8;EXENDY_2=14.....但是这样肯定要写很多if else,而且只是看起来可行,实际操作过程肯定会有很多问题。

所以想到的一个解决方法就是output;按照研究天数加上do循环输出所有的观测。

然后根据新生成的i来判断这条观测所属的VISIT。3个不同颜色的框代表根据规则衍生出新的访视,可以发现是可行的,比如第7条它的EXDOSE是2,然后所属VISIT是"Phase I",生成正确的访视之后,我们只需要对每个访视分别求和就可以求出每个访视对应的依从性了。

二:

第二个问题还是跟do循环有关,也就是根据访视窗的上限和下限衍生出对应的访视,一般SAP会规定对应的访视窗上下限值,很多人可能会写很多个if else ,这样程序可能会有点不美观,对于这种有规律的值,我们只要找出相关的规律,之后用do循环就可以解决了。

我们发现上下限都是按照90递增,找到了规律,接下来就是实现了:

就这一段简单的程序,就能实现上面if else的效果。

三:判断宏变量是不是存在,存在之后再继续进行相关处理。

关于宏变量存不存在,以前的文章写过一次

172:如何判断宏变量是否存在(二)--%symexist

这次是在处理逻辑回归的时候,先进行单因素分析,之后对单因素分析中显著的自变量再纳入多因素分析,那这时候我们肯定要先判断有哪些自变量显著。处理逻辑就是把显著的自变量处理成宏变量,再导入到多因素回归分析中。

单因素分析后,我们可以筛选出显著的自变量:

proc sql;

select Variable into :mulvar separated by " " from logis(where=(ProbChiSq<0.05));

quit;

/*%put &mulvar;*/

但是有可能所有自变量都不显著,这时候如果我们直接导入到多因素回归分析中,会报错,所以我们得先判断下这个宏变量是否存在,不存在的话再采用另一种解决方式:

%macro exist();

    %if %symexist (mulvar) %then %do;

         proc logistic data=XXXX;

model 因变量=&mulvar/SELECTION=STEPWISE ;

         run;

    %end;

    %else %do;

/*create empty datasets*/

%end

%mend;

上一篇下一篇

猜你喜欢

热点阅读