如何使用 SAS Proc IML select 5 个最小值?
How to select the 5 minimum values with SAS Proc IML?
我想知道是否可以使用 IML 按行 select 5 个最小值或最大值?
这是我的代码:
Proc iml ;
use table;
read all var {&varlist} into matrix ;
n=nrow(matrix) ; /* n=369 here*/
p=ncol(matrix); /* p=38 here*/
test=J(n,5,.) ;
Do i=1 to n ;
test[i,1]=MIN(taux[i,]);
End;
Quit ;
所以我想获得一个矩阵测试,其中第 1 列包含最大最小值,然后第 2 列包含我的行的最小值,第一个值除外,等等...
如果你有什么想法! :)
如果不是 IML 事件(但 SAS : base, sql..)
例如:
Data test; input x1-x10 ; cards;
1 9 8 7 3 4 2 6
9 3 2 1 4 7 12 -2
;run;
我想获取按行排序的结果:
1 2 3 4 6 7 8 9
-2 1 2 3 4 7 12
为了 select 我的 5 个最小值在另一个 table :
y1 y2 y3 y4 y5
1 2 3 4 6
-2 1 2 3 4
您可以在 PROC IML 中使用 call sort()
对列进行排序。因为要分离列而不是对整个矩阵进行排序,所以提取列,对其进行排序,然后更新原始的。
您想对行进行排序,因此转置您的矩阵,进行排序,然后转回。
proc iml;
have = {1 9 8 7 3 4 2 6,
9 3 2 1 4 7 12 -2};
print have;
n = nrow(have);
have = have`; /*Transpose because sort works on columns*/
do i=1 to n;
tmp = have[,i];
call sort(tmp,1);
have[,i]=tmp;
end;
have = have`;
want = have[,1:5];
print want;
quit;
阅读文章"Compute the kth smallest data value in SAS"
如文章中所述定义模块。然后使用以下内容:
have = {1 9 8 7 3 4 2 6,
9 3 2 1 4 7 12 -2};
x = have`; /* transpose */
ord = j(5,ncol(x));
do j = 1 to ncol(x);
ord[,j] = ordinal(1:5, x[,j]);
end;
print ord;
如果您的数据中有缺失值并想排除它们,请使用 SMALLEST 模块而不是 ORDINAL 模块。
我想知道是否可以使用 IML 按行 select 5 个最小值或最大值?
这是我的代码:
Proc iml ;
use table;
read all var {&varlist} into matrix ;
n=nrow(matrix) ; /* n=369 here*/
p=ncol(matrix); /* p=38 here*/
test=J(n,5,.) ;
Do i=1 to n ;
test[i,1]=MIN(taux[i,]);
End;
Quit ;
所以我想获得一个矩阵测试,其中第 1 列包含最大最小值,然后第 2 列包含我的行的最小值,第一个值除外,等等...
如果你有什么想法! :) 如果不是 IML 事件(但 SAS : base, sql..)
例如:
Data test; input x1-x10 ; cards;
1 9 8 7 3 4 2 6
9 3 2 1 4 7 12 -2
;run;
我想获取按行排序的结果:
1 2 3 4 6 7 8 9
-2 1 2 3 4 7 12
为了 select 我的 5 个最小值在另一个 table :
y1 y2 y3 y4 y5
1 2 3 4 6
-2 1 2 3 4
您可以在 PROC IML 中使用 call sort()
对列进行排序。因为要分离列而不是对整个矩阵进行排序,所以提取列,对其进行排序,然后更新原始的。
您想对行进行排序,因此转置您的矩阵,进行排序,然后转回。
proc iml;
have = {1 9 8 7 3 4 2 6,
9 3 2 1 4 7 12 -2};
print have;
n = nrow(have);
have = have`; /*Transpose because sort works on columns*/
do i=1 to n;
tmp = have[,i];
call sort(tmp,1);
have[,i]=tmp;
end;
have = have`;
want = have[,1:5];
print want;
quit;
阅读文章"Compute the kth smallest data value in SAS" 如文章中所述定义模块。然后使用以下内容:
have = {1 9 8 7 3 4 2 6,
9 3 2 1 4 7 12 -2};
x = have`; /* transpose */
ord = j(5,ncol(x));
do j = 1 to ncol(x);
ord[,j] = ordinal(1:5, x[,j]);
end;
print ord;
如果您的数据中有缺失值并想排除它们,请使用 SMALLEST 模块而不是 ORDINAL 模块。