创建数据集输出..从哪里开始?
Creating dataset outputs..where to start with this one?
数据集中的变量为:Event, EventType, FName, LName, Age, Gender, Score
。
我正在尝试创建一份报告,为我提供每个 event/event 类型每个年龄(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
我希望它 return:
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
我希望它只是 return 因为没有 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 名参与者。无论如何,是否可以在一个或两个数据集输出中完成所有这些?
/* 创建示例数据集 */
data input_dataset;
infile datalines dlm=",";
input Event : .
EventType : $ 10.
FName : .
LName : .
Age : 8.
Gender : .
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;
/* 根据所需参数排序 - event EventType age Gender */
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;
数据集中的变量为:Event, EventType, FName, LName, Age, Gender, Score
。
我正在尝试创建一份报告,为我提供每个 event/event 类型每个年龄(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
我希望它 return:
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
我希望它只是 return 因为没有 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 名参与者。无论如何,是否可以在一个或两个数据集输出中完成所有这些?
/* 创建示例数据集 */
data input_dataset;
infile datalines dlm=",";
input Event : .
EventType : $ 10.
FName : .
LName : .
Age : 8.
Gender : .
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;
/* 根据所需参数排序 - event EventType age Gender */
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;