创建数据集输出......从哪一个开始?

时间:2015-02-23 00:38:43

标签: sorting report sas datastep

数据集中的变量是: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

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

1 个答案:

答案 0 :(得分: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;