如何 select SAS 列中值的百分比?

How to select a percentage of values from a column in SAS?

我有 70 个不同大小的数据库(相同的列数,不同的行数)。 考虑到给定的 VAR1 列,我需要获得高 25% 的值和低 25% 的值。

我有:

id VAR1
1    10
2    -5
3   -12
4     7
5    12
6     7
7    -9
8   -24
9     0
10    6
11  -18
12   22

按 VAR1 排序,我需要 select 包含 3 个最小和 3 个最大(每个极端的 25%)的行(所有列),即

id  VAR1
8   -24
11  -18
3   -12
7   -9
2   -5
9   0
10  6
4   7
6   7
1   10
5   12
12  22

我需要 keep 在数据库中包含 VAR1 等于 -24、-18、-12、10、12 和 22 的行(所有列)。

id  VAR1
8   -24
11  -18
3   -12
1   10
5   12
12  22

我一直在想的:

  1. 按升序排列 VAR1 列;
  2. 创建从 1 到 N 的编号列 (n=_N_) - 在本例中,N=12;
  3. 我做a=N*0.25(得到代表25%的值);
  4. 我做b=N-a(得到代表"last" 25%的值)。

所以,我可以使用 keepif N<a.....我要前25%(最小的)。 if N>b.....我要最后的25%(最大的)。

我可以计算ab。 但是在这种情况下,我没有得到 N 的最大值 12.

我将对 70 数据库重复此操作,我不想每次都必须输入这个最大值(它因数据库而异)。

我需要帮助 "fix" 最大值 (N) 而无需键入它(即使它在另一个 "auxiliary column" 的所有行中重复)。 或者如果有更好的方法从每一端获得这 25%。

我的代码:

proc sort data=have; by VAR1; run;
data want; set have;
seq=_N_;
N=max(seq); *N=max. value of lines. (I stopped here and don’t know if below is right);
a=N*0.25;
b=N-b;
if N<a;
if N>b;
run;

非常感谢!

Proc RANK 计算可用于 select 所需行的百分位数。

示例:

data have1 have2 have3 have4 have5;
  do id = 1 to 100;
    X = ceil(rand('normal', 0, 10));
    if id < 60 then output have1;
    if id < 70 then output have2;
    if id < 80 then output have3;
    if id < 90 then output have4;
    if id < 100 then output have5;
  end;
run;

proc rank data=have1 percent out=want1(where=(pct not between 25 and 75)) ;
  var x;
  ranks pct;
run;

proc rank data=have2 percent out=want2(where=(pct not between 25 and 75)) ;
  var x;
  ranks pct;
run;

proc rank data=have3 percent out=want3(where=(pct not between 25 and 75)) ;
  var x;
  ranks pct;
run;