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

在实际应用中,我们经常会把宽数据(一个患者一条观测)转化为长数据(一个患者多条观测)或者将长数据(一个患者多条观测)转换为宽数据(一个患者一条观测),在R中我们可以利用Reshape2包来实现。在SAS中有两种实现方法:数组和TRANSPOSE。这一篇博文先讲解利用数组重构SAS数据,下一篇博文将介绍利用TRANSPOSE函数重构SAS数据。

1.宽数据变长数据

***创建数据集
DATA DIAGNOSE;
   INPUT @1  PATNO    2.
         @3  DATE     MMDDYY10.
         @14 DX1 - DX3;
   FORMAT DATE MMDDYY10.;
DATALINES;
10/21/1999 1 2 .
10/29/1999 2 . .
11/11/2000 3 . .
01/01/2000 1 2 3
02/02/2000 3 2 .
03/15/2000 4 . .
;

***将宽数据转化为长数据,不利用数组
DATA NEW_DX;
   SET DIAGNOSE (DROP = DATE);

   DX = DX1;
   IF DX NE . THEN OUTPUT;
   DX = DX2;
   IF DX NE . THEN OUTPUT;
   DX = DX3;
   IF DX NE . THEN OUTPUT;

   KEEP PATNO DX;
RUN;

***将宽数据转化为长数据,利用数组
DATA NEW_DX;
   SET DIAGNOSE (DROP = DATE);
   ARRAY DXARRAY[3] DX1 - DX3;

   DO I = 1 TO 3;
      DX = DXARRAY[I];
      IF DX NE . THEN OUTPUT;
   END;

   KEEP PATNO DX;
RUN;

2.将长数据转化为宽数据

参考资料:《Longitudinal Data and SAS: A Programmer‘s Guide》

时间: 2024-10-10 01:58:23

SAS笔记(8) 利用数组重构SAS数据集的相关文章

【SAS BASE】利用FILE语句和PUT语句输出简单报告

1 DATA _NULL; /*_NULL_使得系统不需要生成一个新的数据集,以节省内存*/ 2 INFILE 'C:\MYRAWDATA\Candy.dat'; 3 INPUT Name $ 1-11 class @15 DateReturned MMDDYY10. Candytype $ Quantity; 4 Profit=Quantity*1.25; 5 6 /*重点:利用FILE和PUT输出报告*/ 7 FILE 'C:\Myrawdata\student.txt' PRINT; /*

Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和OutputStream方式 不使用缓存直接使用字节流操作,一次传输的字节数据在300字节以内,目前没有测试差距会有多大. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException;

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

EularProject 48: 利用数组求和

Problem 48 The series, 11+22+33+...+1010=10405071317. Find the last ten digits of the series, 11+22+33+...+10001000. Answer: 9110846700 Completed on Thu, 23 Jul 2015, 17:26 初步思路,可以利用元对的方式计算每一个数需要乘的数 def func(a): for i in range(0,len(a)): a[i][1]*=a[i

利用数组求前n个质数

我的算法思想和实现方式都在代码和注释当中呢,这样的方式确实使算法复杂度降低一个等级,很好啊. #include <stdio.h> #include <time.h> /** * 利用数组求前n个质数 * 确定一个数m是否为质数,可以用已求出的质数对m * 的整除性来确定 */ //如果不知道质数的特性和想不到优化思路的方法 void getNPrimes_normal(); //优化之后的方法 void getNPrimes_optimize(); int main(void)

【示例】C语言中利用数组存放函数指针

C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: int max(int,int); // 声明函数,比较两数大小 int (*p)(); //声明指向函数的指针变量 p=max; //将函数max的入口地址赋给指针变量p int c=(*p)(a,b); //调用函数 2.函数指针作为函数参数 该例子中每次给process函数不同实参(函数名)

WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作.下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考. 我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate; 1.首先集成Apacha CXF WebService 到 Spring 框架中; apache

学习笔记:利用GDI+生成简单的验证码图片

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 学习笔记:利用GDI+生成简单的验证码图片 1 /// <summary> 2 /// 单击图片时切换图片 3 /// </summary> 4 /// <param name="sender">&

30. 蛤蟆的数据结构笔记之三十数组之厄拉多塞筛

30. 蛤蟆的数据结构笔记之三十数组之厄拉多塞筛 本篇名言:"勤劳远比黄金可贵. -- 萨迪" 欢迎转载,转载请标明出处: 1.  厄拉多塞 厄拉多塞是一位古希腊数学家,他在寻找素数时,采用了一种与众不同的方法:先将2-N的各数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数:第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数:现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数--依次类推,一直到所有小于或等于N的各数都画了圈或划去为止.这时,表