0

数据集中的变量是:Event, EventType, FName, LName, Age, Gender, Score.

我正在尝试创建一个报告,该报告为每个性别每个年龄(18-65 岁)的每个事件/事件类型提供最低 5 分。

例如,我想要参加 EventA EventtypeB 的每个 18 岁女性的最低 5 分,然后我想要所有 19 岁的女性,依此类推。对于每个性别。附注 - 并非所有年龄段都有 5 名参与者。例如,可能没有 20 岁的人参加,可能只有 2 名 21 岁的人。

我最初试图通过为每个年龄制作一组单独的数据集来解决这个问题,但我知道必须有更好的方法来做到这一点。我会很感激任何帮助谢谢我对 SAS 很陌生,但我在各个方面都有介绍经验。

这是一些示例输入:
Mile Sprint John Smith 19 Male 15.31
Mile Sprint Alex Doe 19 Male 13.21
Mile Sprint Ian Sore 19 Male 23.51
Mile Sprint Sean Lae 19 Male 12.34
Mile Sprint Mike Rai 19 Male 17.27
Mile Sprint Connor Te 19 Male 11.23
Mile Sprint Simon Doe 19 Male 15.21
Mile Long Jane Joy 37 Female 35.12
Mile Long Victoria K 37 Female 27.31
Mile Long Chris Li 25 Male 23.43

对于Mile Sprint 19 Males我希望它返回:
Mile Sprint Connor Te 19 Male 11.23
Mile Sprint Sean Lae 19 Male 12.34
Mile Sprint Alex Doe 19 Male 13.21
Mile Sprint Simon Doe 19 Male 15.21
Mile Sprint John Smith 19 Male 15.31

因为Mile Long 37 Female没有 5 个参与者,我希望它只返回这个:
Mile Long Victoria K 37 Female 27.31
Mile Long Jane Joy 37 Female 35.12

使用显示的示例输入,我试图获得Mile Sprint19 岁男性的 5 个最低分数。然后对于 20-65 岁的男性也是如此。然后Mile Long对所有男性都一样。女性反之亦然。假设一场比赛中可能没有 5 名参与者,或者可能有超过 5 名参与者。无论如何要在一个或两个数据集输出中完成所有这些操作吗?

4

1 回答 1

2

/* 创建样本数据集 */

    data input_dataset;
    infile datalines dlm=",";
    input Event : $10.
          EventType : $ 10.
          FName : $10.
          LName : $10.
          Age  : 8.
          Gender : $10.
          Score : 8.
          ;
    datalines;
    Mile,Sprint,John,Smith,19,Male,15.31
    Mile,Sprint,Alex,Doe,19,Male,13.21
    Mile,Sprint,Ian,Sore,19,Male,23.51
    Mile,Sprint,Sean,Lae,19,Male,12.34
    Mile,Sprint,Mike,Rai,19,Male,17.27
    Mile,Sprint,Connor,Te,19,Male,11.23
    Mile,Sprint,Simon,Doe,19,Male,15.21
    Mile,Long,Jane,Joy,37,Female,35.12
    Mile,Long,Victoria,K,37,Female,27.31
    Mile,Long,Chris,Li,25,Male,23.43
    ;
    run;

/* 根据所需参数排序 - 事件 EventType 年龄 性别 */

proc sort data =  input_dataset;
by event EventType age Gender score;
run;

/*根据上述参数选择最低的五个分数*/

data input_dataset_1(drop=num);
set input_dataset;
retain num;
by event EventType age Gender score;
if first.gender then num=1 ; else num=num+1;
if num<=5;
run;
于 2015-02-23T04:24:11.623 回答