Sas WPS中给定列的数据准备
我有一个数据集,有两列,分别是性别和出生日期,我需要这样的输出形式,即有两行,即男性和女性性别,列为一年中的月份。我在SAS中如何做到这一点 假设:Sas WPS中给定列的数据准备,sas,Sas,我有一个数据集,有两列,分别是性别和出生日期,我需要这样的输出形式,即有两行,即男性和女性性别,列为一年中的月份。我在SAS中如何做到这一点 假设: Gender Birthdate Male 01/10/1989 Female 02/12/1990 以此类推。我有大约10万行。如果我理解了您的要求,并且下面的结果集看起来是否像您想要的输出。。下面是我用来将初始数据集命名为“YYY”的代码 data new(drop=year1 MonthName birthdate) ;
Gender Birthdate
Male 01/10/1989
Female 02/12/1990
以此类推。我有大约10万行。如果我理解了您的要求,并且下面的结果集看起来是否像您想要的输出。。下面是我用来将初始数据集命名为“YYY”的代码
data new(drop=year1 MonthName birthdate) ;
set yyy;
format new_col $14. MonthName year1 $12.;
year1 = compress(year(birthdate));
MonthName=put(birthdate,monname.);
new_col = trim(MonthName)||trim(year1);
run;
proc sort data=new;
by gender new_col;
run;
proc sql;
create table new2 as
select gender, New_col, count(new_col) as New_col2
from new
group by gender, New_col;
quit;
proc transpose data=new2
out=result
name=New_col;
by gender;
id New_col;
run;
Data final;
set result(drop=New_col);
run;
结果集:
所以我假设你想要每个月出生的人数 第一个数据集创建一些测试数据
data test;
format Gender $8. Birthdate date9.;
do i=1 to 5000;
gender="MALE";
Birthdate = today() + ceil(ranuni(123)*365);
output;
end;
do i=1 to 5000;
gender="FEMALE";
Birthdate = today() + ceil(ranuni(123)*365);
output;
end;
drop i;
run;
proc sort data=test;
by gender;
run;
data output(keep=gender month:);
set test;
by gender;
array Month_[12];
if first.gender then do;
do i=1 to 12;
month_[i] = 0;
end;
end;
month_[month(birthdate)] + 1;
if last.gender then
output;
run;
创造
如果你有10万行,你想把它们减少到只有两行,你想在出生日期进行什么计算?你需要解释你想进行的分组类型。这是根据某个变量,比如每个州还是什么?我猜,你想计算1月、2月、3月、4月、12月的出生日期。请你澄清一下好吗?如果没有,我们将无法回答。