考虑这样一种场景:我们有一份患者入院检查的数据,我们知道一个患者有可能会多次去医院做检查,每次检查的结果可能为阳性,也可能为阴性。我们现在关注的是某一个患者在若干次检查中是否出现了阳性结果,在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》

SAS笔记(5) FLAG和计数器的更多相关文章

  1. SAS笔记

    SAS基础知识 SAS里面的PROC一览 The ACECLUS Procedure : 聚类的协方差矩阵近似估计(approximate covariance estimation for clus ...

  2. JMeter学习笔记(十) 计数器

    前面写了导出文件接口的测试,对于导出文件的文件名称,为了不重复(即不覆盖之前的文件),可以添加一个计数器来设置不同的index,另外也可以借助函数助手. 下面是我使用到的关于计数器的简单应用,其他的自 ...

  3. SAS笔记(8) 利用数组重构SAS数据集

    在实际应用中,我们经常会把宽数据(一个患者一条观测)转化为长数据(一个患者多条观测)或者将长数据(一个患者多条观测)转换为宽数据(一个患者一条观测),在R中我们可以利用Reshape2包来实现.在SA ...

  4. SAS笔记(7) PROC SQL

    参考资料:<Longitudinal Data and SAS: A Programmer's Guide>

  5. SAS笔记(4) FIRST.和LAST.临时变量

    FIRST.和LAST.临时变量是SAS很有特色的一点,我在R和Python中暂时没有发现类似的功能(也许它们也有这个功能,我不知道而已).考虑这样一种场景:我们有患者就诊的数据,每一条观测对应一个患 ...

  6. SAS笔记(3) LAG和DIFF函数

    在实际的应用中,我们会想查看当前观测的上一个观测值,在上一篇博客中我们使用了RETAIN语句来记录上一条观测,其实SAS还提供了一个很好用的函数LAG.当我们使用函数时,一定要明确该函数的返回值是什么 ...

  7. SAS笔记(2) RETAIN语句

    本文重点: 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值. SUM语句和SET语句会自动RETAIN变量. 1. RETAIN语句 1.1 Example 1 先来看看在DA ...

  8. SAS笔记(1) PDV与数据读入

    其实我是不喜欢SAS的.当然,我不喜欢她,并不代表她不好,实际上在某些应用场景下SAS是款很优秀的软件.我的数据分析之路始于R,品尝过R的灵活与简洁(不论是软件安装还是语法)后,再来学习SAS,的确提 ...

  9. SAS笔记(6) PROC MEANS和PROC FREQ

    PROC MEANS和PRC FREQ在做描述性分析的时候很常用,用法也比较简单,不过这两个过程步的某些选项容易忘记,本文就梳理一下. 在进入正文前,我们先创建所需的数据集TEST_SCORES: D ...

随机推荐

  1. C#实现网站登录

    public class HTMLHelper    {        /// <summary>           /// 获取CooKie          /// /// < ...

  2. PostgreSQL聚合函数的filter子句

    一张表存储了学生id,科目,分数三个字段,求每个学生60分以下与参加的总科目占比.(今天电脑不好用,图片总是这样) 其实一个count(*) filter  就可以查出来,但是没用过PG的一个人竟然说 ...

  3. linux命令学习笔记(41):ps命令

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前 那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程 ...

  4. 2017-2018-1 20179215《Linux内核原理与分析》第八周作业

    实验:ELF文件格式与程序的编译链接 一.可执行文件的创建  从源代码到可执行程序所要经历的过程概述:  源代码(.c .cpp .h)经过c预处理器(cpp)后生成.i文件,编译器(cc1.cc1p ...

  5. Operating System-Thread(2) Multi-Process-Parallel vs Multi-Thread-Parallel

    本文主要介绍线程的模型 一.Multi-Process-Parallel vs Multi-Thread-Parallel 多进程的并行:CPU在多个进程之间进行切换,系统给人一种多个进程在并行执行的 ...

  6. keepalived基本应用解析

    原地址:http://blog.csdn.net/moqiang02/article/details/37921051 概念简单认知: Keepalived:它的诞生最初是为ipvs(一些服务,内核中 ...

  7. POJ1703(2集合并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39402   Accepted: ...

  8. netty支持的协议

    流经网络的数据总是具有相同的类型:字节.这些字节是如何流动的主要取决于我们所说的 网络传输--一个帮助我们抽象底层数据传输机制的概念.用户并不关心这些细节:他们只想确保他们的字节被可靠地发送和接收. ...

  9. Webpack打包之后[-webkit-box-orient: vertical]样式丢失

    背景:项目是用的vue全家桶套餐 今天在工作中遇到一个问题,需求是要求文字只能显示3行,超过3行则隐藏且显示 '...', 于是我加了如下样式在标签里面: display: -webkit-box;- ...

  10. Go和HTTPS

    转自:http://tonybai.com/2015/04/30/go-and-https/ 近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验.之前只是粗浅接触 ...