首页 > 代码库 > SAS笔记(4) FIRST.和LAST.临时变量
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=http://www.mamicode.com/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.临时变量
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。