如何在包含用_分隔的数字的变量上使用proc转置?

时间:2014-02-13 07:59:09

标签: sas

嗨,我是新手,我有关于proc转调的问题

我有这个数据

Input

School Name      State  School Code    26/07/2009   02/08/2009  09/08/2009  16/08/2009
Northwest High   IL            14556          06       06              06      06
Georgia High     GA            147            05       05              05      06
Macy Hgh         TX            45456          NA       NA              NA      NA

所需的输出是

School Name State   School Code Date    Absent
Northwest High  IL  14566   26/07/2009  6
Northwest High  IL  14556   02/08/2009  6
Northwest High  IL  14556   09/08/2009  6
Northwest High  IL  14556   16/08/2009  6
Georgia High    GA  147     26/07/2009  5
Georgia High    GA  147     02/08/2009  5
Georgia High    GA  147     09/08/2009  5
Georgia High    GA  147     16/08/2009  6
Macy Hgh        TX  45456   26/07/2009  NA
Macy Hgh        TX  45456   02/08/2009  NA
Macy Hgh        TX  45456   09/08/2009  NA
Macy Hgh        TX  45456   16/08/2009  NA

这是我编写的代码

proc sort data=work.input;
by School_Name State School_Code;
run;

proc transpose data=work.input out=work.inputModified;
by by School_Name State School_Code;
run

我得到这个错误,说没有变量可以转置我认为问题是因为变量是像这样的实际数字_26_07_2009 sas无法识别它们,

但是我没有得到所需的输出日期是实际变量导入到sas时它们变成了_26_07_2009。请注意,大约有185个日期,它们是实际变量。

由于

1 个答案:

答案 0 :(得分:1)

以下转置完成了这项工作:

proc transpose data=work.input out=work.inputModified;
by School_Name State School_Code;
var _:;
run;

注意_:符号 - 它会选取以下划线开头并转置它们的所有变量。

正如我在前面评论中的链接中所提到的,如果您没有明确指定要转置的变量 - 那么proc transpose默认查找不在by变量中的数字变量列表转置。但是,由于你的日期变量是作为字符串读入的[由于存在NA s],所以它是NOTE: No variables to transpose.

您可以使用以下内容将日期和缺席列转换为数字列。

data inputModified2;
set inputModified;
format date date9.;
date = input(compress(tranwrd(_name_,'_','')), ddmmyy8.);
if col1 NE 'NA' then absent = input(col1, 8.);
else absent=.;
drop _name_ col1;
run;