SAS数据集:计算与IF条件匹配的观察值

时间:2016-01-13 10:10:54

标签: if-statement sas dataset conditional-statements counting

这是一个非常基本的问题,但我找不到一个简单的方法。 我有一个数据集,引用不同的高中和学生:

Highschool Students Sexe A 1 m A 2 m A 3 m A 4 f A 5 f B 1 m B 2 m

我想创建两个新变量来计算每所学校的男女人数:

Highschool Students Sexe Nb_m Nb_f A 1 m 1 0 A 2 m 2 0 A 3 m 3 0 A 4 f 3 1 A 5 f 3 2 B 1 m 1 0 B 2 m 2 0

我终于可以提取最后一行,总计看起来像这样:

Highschool Students Sexe Nb_m Nb_f A 5 f 3 2 B 2 m 2 0

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以在一个PROC SQL步骤中执行此操作...

另外,我认为你真的不需要最后一行的Sexe值。

proc sql ;
  create table want as
  select Highschool, 
         sum(case when Sexe = 'f' then 1 else 0 end) as Nb_f,
         sum(case when Sexe = 'm' then 1 else 0 end) as Nb_m,
         Nb_f + Nb_m as Students
  group by Highschool
  order by Highschool ;
quit ;

答案 1 :(得分:0)

首先,您必须按 Highschool 对数据集进行排序:

proc sort data = your_dataset;
    by Highschool;
run;

然后你用

    - 保留不会在每条记录中重置Nb_m和Nb_f;
    - 最后功能和输出语句只打印每所学校的最后一个观察结果。
data new_dataset;
    set your_dataset;
    by Highschool;
    retain Nb_m Nb_f;
    if Sexe = 'm' then
        Nb_m + 1;
    else
        Nb_f + 1;
    if last.Highschool then do;
        Students = Nb_m + Nb_f;
        output;
        Nb_m = 0;
        Nb_f = 0;
    end;
run;