在sas中按行号选择特定行

San*_*ram 3 sas

我是SAS新手我有SAS数据(它不包含Obs列)

Obs    ID    Name    Score1    Score2    Score3

1     101               90        95        98
2     203               78        77        75
3     223               88        67        75
4     280               68        87        75
.
.
.
.
100   468               78        77        75
Run Code Online (Sandbox Code Playgroud)

我希望数据的行号为2 6 8 10 34.输出应该是这样的

Obs    ID    Name    Score1    Score2    Score3

1     203               78        77        75
2     227               88        67        75
3     280               68        87        75
.
.
.
Run Code Online (Sandbox Code Playgroud)

提前致谢.

sta*_*One 6

您可以使用数据步骤循环遍历每一行数据,并且仅当您处于第 n 个循环且具有这样的条件时才输出这些行。

data test;
    set LIB.TABLE;
    if _N_ in (2, 6, 8, 10, 34) then output;
    run;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,其中_N_将对应于行号。

  • 由于 OP 对于 SAS 来说是新的,值得指出的是 _n_ 实际上并不是行号。它是数据步骤迭代次数的计数器。人们经常在这样的简单数据步骤中将其用作行号。很高兴知道它并不是真正的行号,在更复杂的数据步骤中 _N_ 可能根本不对应于数据步骤行号。 (4认同)

use*_*489 6

另一个答案适用于小型表,但如果您使用的是非常大的表,则它会低效,因为它会读取表中的每一行以查看它是否具有正确的行号.这是一个更直接的方法:

data example;
    do i = 2, 6, 8, 10;
        set sashelp.class point = i;
        output;
    end;
    stop;
run;
Run Code Online (Sandbox Code Playgroud)

这样就可以选出你真正想要的行,而不是读取所有其他行.

  • 由于OP是SAS的新手,因此可能值得一提的是`stop`声明的重要性.由于SAS直接访问特定记录,因此它不会读取通常自动结束查询的文件结束标记.没有`stop`,查询永远不会结束. (2认同)