FIRST.和LAST.临时变量是SAS很有特色的一点,我在R和Python中暂时没有发现类似的功能(也许它们也有这个功能,我不知道而已)。考虑这样一种场景:我们有患者就诊的数据,每一条观测对应一个患者的一次就诊记录,我们知道一个患者可能会多次就医,那么如何找到这个患者第一次就医时间以及最有一次就医时间呢?又或者我们如何确定一个患者是不是因为同一个疾病多次入院。这篇博文将详细介绍如何利用FIRST.和LAST.这两个临时变量解决类似问题。

1.创建FIRST.和LAST.临时变量

  1. 创建FIRST.和LAST.变量的前提是数据必须是排好序的。利用SORT排序,BY var。
  2. 使用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》

最新文章

  1. 一段发工资的shell代码
  2. 锁ReaderWriterLockSlim介绍
  3. mathematica练习程序(获得股票数据)
  4. 如何让代码实现C++
  5. css使input中的值自动变大写
  6. 【EF 4】ORM框架及其流行产品之一EF介绍
  7. ProgressIndicator显示进度条以及一些文字信息
  8. Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全
  9. C#操作xml的3种方式
  10. Boost库安装(实测vs2012)
  11. Android基础夯实--你了解Handler有多少?
  12. 查看已安装tensorflow版本
  13. 阿里技术专家详解Dubbo实践,演进及未来规划
  14. Window应急响应(二):蠕虫病毒
  15. Java技术学习路线笔记:Maven安装和作用
  16. 登录iOS Dev Center
  17. 《基于Nginx的中间件架构》学习笔记---1.环境配置
  18. eigen Matrix详解
  19. Java动态调用类中方法
  20. 第8章—使用Spring Web Flow—Spring Web Flow的配置

热门文章

  1. Spark- Spark普通Shuffle操作的原理剖析
  2. 尴尬,qt出现错误,然后莫名又好了..
  3. 关于float与double区别
  4. Hibernate 原汁原味的四种抓取策略(转)
  5. Tomcat_异常_03_Tomcat日志(Logger)中文乱码
  6. 1_Command 游戏开发命令模式
  7. ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)
  8. Parallel Programming-Task Result && Continuation Task
  9. centos7添加环境变量
  10. jexus入门