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》
SAS笔记(5) FLAG和计数器的更多相关文章
- SAS笔记
SAS基础知识 SAS里面的PROC一览 The ACECLUS Procedure : 聚类的协方差矩阵近似估计(approximate covariance estimation for clus ...
- JMeter学习笔记(十) 计数器
前面写了导出文件接口的测试,对于导出文件的文件名称,为了不重复(即不覆盖之前的文件),可以添加一个计数器来设置不同的index,另外也可以借助函数助手. 下面是我使用到的关于计数器的简单应用,其他的自 ...
- SAS笔记(8) 利用数组重构SAS数据集
在实际应用中,我们经常会把宽数据(一个患者一条观测)转化为长数据(一个患者多条观测)或者将长数据(一个患者多条观测)转换为宽数据(一个患者一条观测),在R中我们可以利用Reshape2包来实现.在SA ...
- SAS笔记(7) PROC SQL
参考资料:<Longitudinal Data and SAS: A Programmer's Guide>
- SAS笔记(4) FIRST.和LAST.临时变量
FIRST.和LAST.临时变量是SAS很有特色的一点,我在R和Python中暂时没有发现类似的功能(也许它们也有这个功能,我不知道而已).考虑这样一种场景:我们有患者就诊的数据,每一条观测对应一个患 ...
- SAS笔记(3) LAG和DIFF函数
在实际的应用中,我们会想查看当前观测的上一个观测值,在上一篇博客中我们使用了RETAIN语句来记录上一条观测,其实SAS还提供了一个很好用的函数LAG.当我们使用函数时,一定要明确该函数的返回值是什么 ...
- SAS笔记(2) RETAIN语句
本文重点: 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值. SUM语句和SET语句会自动RETAIN变量. 1. RETAIN语句 1.1 Example 1 先来看看在DA ...
- SAS笔记(1) PDV与数据读入
其实我是不喜欢SAS的.当然,我不喜欢她,并不代表她不好,实际上在某些应用场景下SAS是款很优秀的软件.我的数据分析之路始于R,品尝过R的灵活与简洁(不论是软件安装还是语法)后,再来学习SAS,的确提 ...
- SAS笔记(6) PROC MEANS和PROC FREQ
PROC MEANS和PRC FREQ在做描述性分析的时候很常用,用法也比较简单,不过这两个过程步的某些选项容易忘记,本文就梳理一下. 在进入正文前,我们先创建所需的数据集TEST_SCORES: D ...
随机推荐
- kreuz-frankfurt-sample-generic-2019-02-08.xodr文件解读
第1行:xml语法所遵循的版本. L2:文件封装标记. L3:Opendrive的主要修订编号 次要修订编号 供应商. L4:记录有关地理参考坐标系的参数,投影-横轴墨卡托 a-地球椭球长半 ...
- Git教程及问题解析
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Git教程 最近用git比较多,做出教程一份,供大家参考. 1. 安装Git,并配置环 ...
- 十二 Django框架,自定义分页
自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring import mark_safe #封装分页类模块 c ...
- Hibernate学习---第十五节:hibernate二级缓存
1.二级缓存所需要的 jar 包 这三个 jar 包实在 hibernate 解压缩文件夹的 lib\optional\ehcache 目录下 2.配置 ehcache.xml <ehcache ...
- Spring4面向切面AOP
AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术.AOP是OOP的补充,是spring框架中的一个 ...
- python实现无序列表:链表
介绍链表前我们先了解下什么是列表. 在对基本数据结构的讨论中,我们使用 Python 列表来实现所呈现的抽象数据类型.列表是一个强大但简单的收集机制,为程序员提供了各种各样的操作.然而,不是所有的编程 ...
- python 3 serial module install
/************************************************************************* * python 3 serial module ...
- 20179203 《Linux内核原理与分析》第十周作业
第17章 设备与模块 一.设备类型 1. Linux及Unix系统: 块设备 字符设备 网络设备 2.块设备: 通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常 ...
- CodeForces-734E Anton and Tree 树的直径
题目大意: 给定一棵有n个节点的树,有黑点白点两种节点. 每一次操作可以选择一个同种颜色的联通块将其染成同一种颜色 现在给定一个初始局面问最少多少步可以让树变为纯色. 题解: 首先我们拿到这棵树时先将 ...
- 构建嵌入式小型Linux系统
构建嵌入式小型Linux系统 摘要:用buildroot构建x86的交叉编译工具链:裁减linux内核,尽可能做到最小:手工构建根文件系统:安装qemu虚拟机,仿真新配置的Linux系统:为新配置的L ...