SAS笔记(5) FLAG和计数器
考虑这样一种场景:我们有一份患者入院检查的数据,我们知道一个患者有可能会多次去医院做检查,每次检查的结果可能为阳性,也可能为阴性。我们现在关注的是某一个患者在若干次检查中是否出现了阳性结果,在R中我们可以使用any函数,在python中可以利用pandas的groupby函数,在SAS中该如何处理呢?今天就立一个flag来解决它。
1.
***创建数据 DATA LAB; INPUT PATNO VISIT_NO OUTCOME; DATALINES; 3 1 0 3 2 0 3 3 1 1 1 0 1 2 1 1 3 0 1 4 1 2 1 0 2 2 0 4 1 1 4 2 1 4 3 1 ; ***利用Flag变量记住前一个观测的值 PROC SORT DATA=LAB; BY PATNO VISIT_NO; RUN; DATA FLAG_TEST; SET LAB; BY PATNO; RETAIN FLAG; ***如果结果阳性,FLAG=1; ***初始化 FLAG; IF FIRST.PATNO = 1 THEN FLAG = 0; ***如果结果阳性,FLAG=1; IF OUTCOME = 1 THEN FLAG = 1; ***运行到最后一个观测时输出; IF LAST.PATNO = 1 THEN OUTPUT; DROP OUTCOME VISIT_NO; RUN; PROC PRINT DATA=FLAG_TEST; TITLE "Listing of Data Set FLAG_TEST"; RUN;
2.利用SUM语句计算每一个病人的阳性结果数目
***注意:数据集lab必须是排好序的; DATA COUNT_TEST; SET LAB; BY PATNO; ***这里没有必要RETAIN COUNT,因为SUM语句会自动RETAIN ***初始化 COUNT; IF FIRST.PATNO = 1 THEN COUNT = 0; ***出现阳性结果,COUNT加一; IF OUTCOME = 1 THEN COUNT + 1; ***当遇到最后一个病人,输出; IF LAST.PATNO = 1 THEN OUTPUT; DROP OUTCOME; RUN; PROC PRINT DATA=COUNT_TEST; TITLE "Listing of Data Set COUNT_TEST"; RUN;