行列转置
数据集转置 定义逻辑库:
LIBNAME fd "d:\week2";
RUN;
数据集的转置
TRANSPOSE过程把一个数据集进行转置,使得观测值和变量的位置互换,即读入源数据集,
产生一个新的数据集,新的数据集的行是原来的列,新数据集的列是原来的行。
1. 语法:
PROC TRANSPOSE DATA=源数据集 OUT=新数据集; VAR 变量;
ID 变量;
COPY 变量;
2. 一个简单的例子
转换成下面的数据集
PROC PRINT DATA=FD.A;
RUN;
PROC TRANSPOSE DATA=FD.A OUT=B;
RUN;
PROC PRINT DATA=B;
RUN;
3. VAR变量:列出要转置的变量;如果没有VAR语句,则源数据集中的在其他语句中没
有列出的数值变量都要转置,如果字符变量要转置,则需要在VAR中列出。没有转置
的变量不进入新的数据集中,除非在COPY 或BY语句中列出。
PROC PRINT DATA=FD.D1;
RUN;
PROC TRANSPOSE DATA=FD.D1 OUT=D2;
RUN;
PROC PRINT DATA=D2;
RUN;
修改代码:
PROC TRANSPOSE DATA=FD.D1 OUT=D2;
VAR A B C D;
RUN;
测试结果。
4.ID语句使得ID变量的格式化值成为新数据集中中转置的变量名,ID变量的格式化值不能
有重复。如有重复,不能正确运行。
将转置代码修改为:
PROC TRANSPOSE DATA=FD.D1 OUT=D2;
ID a;
RUN;
测试结果
5.COPY的变量不进行转置,直接从源数据集中复制到新数据集中,如果必要,采用缺失值
填充。
修改代码
PROC TRANSPOSE DATA=FD.D1 OUT=D2;
ID a;
COPY b;
RUN;
6.BY 变量:实现分组转置,分组变量被包含在输出数据集中,但是不被转置,要求BY变
量需要排序。
举例 :将单选题数据集single转置成如下格式。
转置成
LIBNAME fd "d:\week2";
RUN;
PROC SORT DATA=fd.single; BY serialno;
PROC TRANSPOSE DATA=fd.single out=single1;
BY serialno;
ID question;
VAR answer;
run;
PROC PRINT DATA=single1; RUN;
改进代码:
PROC TRANSPOSE DATA=fd.single out=single1(DROP= _NAME_ _LABEL_);
BY serialno;
ID question;
VAR answer;
run;
改进代码:
PROC TRANSPOSE DATA=fd.single out=single1(DROP= _NAME_ _LABEL_)
PREFIX=question;
BY serialno;
ID question;
VAR answer;
run;
举例:将多选题数据集转置成如下图所示:
转置参考代码:
DATA multiple;
SET fd.multiple;
ques_ans=compress(""||question||"answer"||answer); RUN;
PROC PRINT;
RUN;
PROC TRANSPOSE DATA=multiple OUT=multiple1(drop=_name_ _label_);
BY serialno ;
ID ques_ans;
VAR answer;
RUN;
PROC PRINT;
RUN;
课后练习:
现收集到两种鱼(Cur和Men)的长度和重量标本,在数据的收集过程中,采用一次输入日期和种类,然后同一行上给出该次收集到样本的观测值,然而,需要2个数据集,一个是对每个长度值包含独立的观测值,另一个对每个重量值包含独立的观测值,每个数据集中需要包含每个长度或重量观测的分组、种类、日期。
本文档为【行列转置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。