嗨,我是新手,我有关于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个日期,它们是实际变量。
由于
答案 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;