zoukankan      html  css  js  c++  java
  • 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;

    参考资料:《Longitudinal Data and SAS: A Programmer's Guide》

  • 相关阅读:
    十天冲刺---Day10
    十天冲刺---Day9
    团队博客目录
    【Beta阶段】M2事后分析
    【Beta阶段】展示博客
    【Beta阶段】测试报告
    【Beta阶段】发布说明
    【Beta阶段】团队源代码管理
    【Beta阶段】第十次Scrum Meeting!!!
    【Beta阶段】第九次Scrum Meeting!(论坛已成功上线)
  • 原文地址:https://www.cnblogs.com/zhangzhangwhu/p/7232434.html
Copyright © 2011-2022 走看看