SAS笔记(4) FIRST.和LAST.临时变量
FIRST.和LAST.临时变量是SAS很有特色的一点,我在R和Python中暂时没有发现类似的功能(也许它们也有这个功能,我不知道而已)。考虑这样一种场景:我们有患者就诊的数据,每一条观测对应一个患者的一次就诊记录,我们知道一个患者可能会多次就医,那么如何找到这个患者第一次就医时间以及最有一次就医时间呢?又或者我们如何确定一个患者是不是因为同一个疾病多次入院。这篇博文将详细介绍如何利用FIRST.和LAST.这两个临时变量解决类似问题。
1.创建FIRST.和LAST.临时变量
- 创建FIRST.和LAST.变量的前提是数据必须是排好序的。利用SORT排序,BY var。
- 使用SET复制已排好序的数据,用BY语句创建FIRST.和LAST.,BY的对象是第一步排序的变量 var。
***创建数据
DATA ONE;
INPUT SUBJECT SCORE;
DATALINES;
1 11
2 21
3 31
1 12
4 41
1 13
2 22
4 42
4 43
; ***1.对数据进行排序
PROC SORT DATA=ONE;
BY SUBJECT;
RUN; ***2.创建FIRST. 和LAST. 临时变量
DATA TWO;
SET ONE;
BY SUBJECT;
FIRST = FIRST.SUBJECT;
LAST = LAST.SUBJECT;
RUN; PROC PRINT DATA=TWO;
TITLE "Demonstrating FIRST. and LAST. Variables";
RUN;

我们发现,对于第3个subject,他的FIRST.和LAST.都为1,说明这个患者只去过一次医院。这里需要注意的是,对于BY语句后面的每一个变量,都会有一个对应的FIRST.和LAST.临时变量,并且这些临时变量不会输出在数据集中。
2. 使用多个BY 变量
DATA THREE;
INFORMAT GENDER GROUP $1.;
INPUT GENDER GROUP SCORE;
DATALINES;
M A 23
M A 24
M B 33
M B 35
M B 36
F A 41
F A 42
F A 43
F B 51
;
PROC SORT DATA=THREE;
BY GENDER GROUP;
RUN; DATA FOUR;
SET THREE;
BY GENDER GROUP;
FIRST_GENDER = FIRST.GENDER;
LAST_GENDER = LAST.GENDER;
FIRST_GROUP = FIRST.GROUP;
LAST_GROUP = LAST.GROUP; PROC PRINT DATA=FOUR;
TITLE "Listing of Data Set FOUR";
RUN;
3. 应用
用FIRST.和LAST.计算每个患者的就医次数
PROC SORT DATA=ONE;
BY SUBJECT;
RUN; DATA COUNT;
SET ONE;
BY SUBJECT; IF FIRST.SUBJECT THEN NUMBER = 0;
NUMBER + 1; IF LAST.SUBJECT THEN OUTPUT;
KEEP SUBJECT NUMBER;
RUN;
***将每个患者的就医次数放入原始数据
DATA COMBINE;
MERGE ONE COUNT;
BY SUBJECT;
RUN;

参考资料:《Longitudinal Data and SAS: A Programmer's Guide》
SAS笔记(4) FIRST.和LAST.临时变量的更多相关文章
- Java 学习笔记之 方法内的临时变量是线程安全
方法内的临时变量是线程安全: 方法内部的私有变量,是线程安全的. public class HasSelfPrivateNum { public void addI(String username) ...
- 《重构-改善既有代码的设计》学习笔记---Replace Temp with Query(以查询取代临时变量)
临时变量的问题在于: 它们是暂时的,而且只能在所属函数内使用.由于临时变量只在所属函数内可见,所以,如果很多地方都在用这个临时变量,就会驱使你写出更长的函数.如果把临时变量替换为一个查询,那么其他函数 ...
- SAS笔记
SAS基础知识 SAS里面的PROC一览 The ACECLUS Procedure : 聚类的协方差矩阵近似估计(approximate covariance estimation for clus ...
- C++11引用临时变量的终极解析
工作中遇到一个引用临时变量的问题,经过两天的学习,私以为:不仅弄明白了这个问题,还有些自己的独到见解. 这里使用一个简单的例子来把自己的学习过程和理解献给大家,如果有什么问题请不吝指正. **** ...
- python 临时变量使用心得
在函数里面的临时变量也可以定义为一个函数名.变量名,这样就可以通过对象来访问这个变量了,函数使用完之后不会消除.因为函数也是对象,python里面一切皆为对象.
- 临时变量不能作为非const类型引用形参的实参
摘要: 非const 引用形参只能与完全同类型的非const对象关联. 具体含义为:(1)不能用const类型的对象传递给非const引用形参: ( ...
- c++ 临时变量
C++的临时变量 它们是被神所遗弃的孩子,没有人见过它们,更没有人知道它们的名字.它们命中注定徘徊于命运边缘高耸的悬崖和幽深的深渊之间,用自己短暂的生命抚平了生与死之间的缝隙.譬如朝露,却与阳光无缘. ...
- C++临时变量的生命周期
C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量.主要的用途主要有两类: 1) 函数的返回值, 如: string proc() { return string(" ...
- Mysql 临时变量的 定义 和 赋值 Set 和 Into 赋值; Swith Mysql版本 Case When的用法
一:临时变量的定义和赋值 DECLARE spot SMALLINT; -- 分隔符的位置 DECLARE tempId VARCHAR(64); -- 循环 需要用到的临时的Cid DECLARE ...
随机推荐
- vuex使用mapActions报错解决办法
先贴上报错: vuex2增加了mapGetters和mapActions的方法,借助stage2的Object Rest Operator 所在通过 methods:{ ...mapActions([ ...
- AngularJS学习笔记(一) 关于MVVM和双向绑定
写在前面: 因为需要开始学习ng,之前在知乎上听大神们介绍ng的时候说这个坑如何的大,学了一阵(其实也就三天),感觉ng做的很大很全,在合适的情境你可以完全使用ng搞定一切.这一点从诸如jqLite之 ...
- 计算机丨浏览器访问出现DNS_PROBE_POSSIBLE解决方法
方法1.打开命令控制台输入: netsh winsock reset.提示重启,电脑重启后就ok了. 其他方法待续......
- leetcode 35 Search Insert Position(二分法)
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- js基础:关于Boolean() 与 if
最近面试比较多,但每次我问这个问题的时候,答出来的同学并不多 var a = 0; if( a) { alert(1); } 这个问题有部分人会答alert(1), 有些人会答不执行. 结果是不执 ...
- RenderingPath 渲染路径
http://blog.csdn.net/lichaoguan/article/details/42554821 RenderingPath 渲染路径 Deferred Lighting 延时光照 延 ...
- css关于内外边距的详细解释
贴图吧,图一眼明了. 无效果时候有 只有一个<div>啦啦啦</div> 只有padding时候有: padding详细设计时: 解释:padding是对内的,如padding ...
- Linux(C/C++)下的文件操作open、fopen与freopen via Boblim
Linux(C/C++)下的文件操作open.fopen与freopen open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. li ...
- Ajax的包装
/** * Created by Administrator on 2016/12/27. *//** * 创建XMLHttpRequest对象 * @param _method 请求方式: post ...
- T-SQL操作XML 数据类型方法 "modify" 的参数 1 必须是字符串文字。
----删除关键字的同时也清理AP表中所有关联这个ID的数据 create trigger Trg_UpdateAppWordOnDelKeyWord on [dbo].[tbl_KeyWord] f ...