[英]How to create 2 new columns with appropriate prefix based on values in columns with same prefix in SAS Enterprise Guide / PROC SQL?
[英]How to create new columns with names of columns with values in descending order in SAS Enterprise Guide / PROC SQL?
我在 SAS 企业指南中有如下表格:
ID | COL_A | COL_B | COL_C
-----|-------|-------|------
111 | 10 | 20 | 30
222 | 15 | 80 | 10
333 | 11 | 10 | 20
444 | 20 | 5 | 20
要求:
我需要创建新列:TOP_1、TOP_2、TOP_3,其中列的名称将从 COL_A、COL_B、COL_C 列的最高值到每个 ID 的最低值
例如,如果 2 个或更多列具有相同的最高值,则取字母表下的第一个。
在 TOP_1 中 - 每个 ID 具有最高值的列的名称在 TOP_2 - 每个 ID 具有第二高值的列的名称在 TOP_3 - 每个 ID 具有第三高值的列的名称
欲望 output:
ID | COL_A | COL_B | COL_C | TOP_1 | TOP_2 | TOP_3
-----|-------|-------|--------|--------|---------|---------
111 | 10 | 20 | 30 | COL_C | COL_B | COL_A
222 | 15 | 80 | 10 | COL_B | COL_A | COL_C
333 | 11 | 10 | 20 | COL_C | COL_A | COL_B
444 | 20 | 5 | 20 | COL_A | COL_C | COL_B
因为:
我怎样才能在 SAS Enterprise Gude 或 PROC SQL 中做到这一点?
首先让我们将您的列表转换为实际数据集。
data have;
input ID COL_A COL_B COL_C ;
cards;
111 10 20 30
222 15 80 10
333 11 10 20
444 20 5 20
;
如果您使用 PROC TRANSPOSE 将您的 COL_: 转换为观察结果。
proc transpose data=have out=tall;
by id col_a col_b col_c;
var col_a col_b col_c;
run;
然后,您可以按降序值(和升序变量名称)排序:
proc sort;
by id col_a col_b col_c descending col1 _name_;
run;
并使用另一个 PROC TRANSPOSE 来创建新变量:
proc transpose data=tall out=want(drop=_name_ _label_) prefix=TOP_;
by id col_a col_b col_c;
var _name_;
run;
如果数据非常大(或者您要检查的列多于 3 列),您可能希望从 BY 组中删除 COL_A COL_B 和 COL_C,而只是将生成的 TOP_: 变量合并回原始数据集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.