Sas WPS中给定列的数据准备

Sas WPS中给定列的数据准备,sas,Sas,我有一个数据集,有两列,分别是性别和出生日期,我需要这样的输出形式,即有两行,即男性和女性性别,列为一年中的月份。我在SAS中如何做到这一点 假设: Gender Birthdate Male 01/10/1989 Female 02/12/1990 以此类推。我有大约10万行。如果我理解了您的要求,并且下面的结果集看起来是否像您想要的输出。。下面是我用来将初始数据集命名为“YYY”的代码 data new(drop=year1 MonthName birthdate) ;

我有一个数据集,有两列,分别是性别和出生日期,我需要这样的输出形式,即有两行,即男性和女性性别,列为一年中的月份。我在SAS中如何做到这一点

假设:

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月的出生日期。请你澄清一下好吗?如果没有,我们将无法回答。