SAS 数据集:计数符合 IF 条件的观察
SAS Dataset : Counting observation that match an IF condition
这是一个非常基本的问题,但我找不到简单的方法来解决这个问题。
我有一个引用不同高中和学生的数据集:
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
有什么想法吗?
首先,您必须按 Highschool:
对数据集进行排序
proc sort data = your_dataset;
by Highschool;
run;
那你用
- 保留 不在每条记录中重置 Nb_m 和 Nb_f;
- last 函数和 output 语句只打印每所学校的最后一次观察。
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;
您可以在一个 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 ;
这是一个非常基本的问题,但我找不到简单的方法来解决这个问题。 我有一个引用不同高中和学生的数据集:
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
有什么想法吗?
首先,您必须按 Highschool:
对数据集进行排序proc sort data = your_dataset;
by Highschool;
run;
那你用
- - 保留 不在每条记录中重置 Nb_m 和 Nb_f;
- - last 函数和 output 语句只打印每所学校的最后一次观察。
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;
您可以在一个 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 ;