SAS,过滤最高价值

时间:2015-10-10 22:51:53

标签: sas

我目前的健康受伤数据集得分为0-6,其中0表示无伤害,6表示致命伤。这是6个分类的身体区域变量。我正在尝试构建一个缩减伤害量表,其中观察中的三个最高分数将被考虑用于计算。如何过滤SAS中每行中最高的三个?以下是一个例子:

  

ID A B C D E F

     

1 0 0 0 3 4 0

     

2 1 2 1 4 0 0

     

3 0 0 5 0 0 0

     

4 1 2 1 5 4 0

所以在OBS 1中,将使用得分3,4和0; OBS 2 - 4,2和1; OBS 3 - 5,0和0; OBS 4 - 5,4,2。

1 个答案:

答案 0 :(得分:0)

我提供了以下代码来执行您的要求,并详细说明了您应该能够针对许多选项/用途修改它的步骤。

基本上,它会将您的数据转换为Quentin建议的转换,然后使用proc方法为每个ID输出前3个观察值。

DATA NEW;
INPUT ID A B C D E F;
CARDS;
1 0 0 0 3 4 0
2 1 2 1 4 0 0
3 0 0 5 0 0 0
4 1 2 1 5 4 0
RUN;

PROC TRANSPOSE DATA=NEW OUT=T_OUT(RENAME=(_NAME_ = VARIABLE COL1=VALUES));
BY ID;
VAR A B C D E F;
PROC PRINT DATA=T_OUT;
RUN;

PROC MEANS DATA=T_OUT NOPRINT;
CLASS ID;
TYPES ID;
VAR VALUES;
OUTPUT OUT=TOP3LIST(RENAME=(_FREQ_=RANK VALUES_MEAN=INDEX_CRITERIA))SUM= MEAN=
    IDGROUP(MAX(VALUES) OUT[3] (VALUES VARIABLE)=)/AUTOLABEL AUTONAME;
PROC PRINT DATA=TOP3LIST;
RUN;

***THEN YOU CAN MERGE THIS DATA SET TO YOUR ORIGINAL ONE BY ID TO GET YOUR INDEX CRITERIA ADDED TO IT***;
***THE INDEX_CRITERIA IS A MEAN FROM PROC MEANS BEFORE THE KEEPING OF JUST THE TOP3 VALUES***;
DATA FINAL (DROP=_TYPE_ RANK VALUES_Sum VALUES_1 VALUES_2 VALUES_3 VARIABLE_1 VARIABLE_2 VARIABLE_3);
MERGE NEW TOP3LIST;
INDEX_CRITERIA2=SUM(VALUES_1, VALUES_2, VALUES_3)/3; *THIS CRITERIA IS AVERAGE OF THE KEPT 3 VALUES;
BY ID;
PROC PRINT DATA=FINAL;
RUN;

祝你好运, 约翰