sas:排序一列而不改变其他列的顺序

时间:2016-03-18 09:11:28

标签: sorting sas

我想知道我们是否可以在sas中订购一列并保持其他变量的相同顺序。 通常,我们使用

  

proc sort

与" by"但这会根据" by"中使用的变量更改所有变量的顺序。

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

您可以使用哈希方法在数据步骤中执行此操作 - 例如在name中反转sashelp.class列的顺序,同时保持其他列的顺序相同:

data class;
    /*Set up an ordered hash object + iterator to hold the columns we want to sort*/
    if 0 then set sashelp.class(keep = name);
    declare hash h(ordered:'d');
    rc = h.definekey('name','_n_');
    rc = h.definedata('name');
    rc = h.definedone();
    declare hiter hi('h');
    /*Populate the hash object, using _n_ as an extra key to prevent deduplication*/
    do _n_ = 1 by 1 until(eof1);
        set sashelp.class(keep = name) end = eof1;
        rc = h.add();
    end;
    /*Read in the columns in the desired order using the hash iterator*/
    do until(eof2);
        set sashelp.class end = eof2;
        rc = hi.next();
        output;
        drop rc;
    end;
run;

这假设您有足够的内存来保存正在排序的列。

答案 1 :(得分:2)

将排序列创建为新数据集,然后将其合并回数据。

proc sort data=have (keep=COLUMN) out=COLUMN ;
  by COLUMN; 
run;
data want ;
  merge have COLUMN;
  * no BY statement ;
run;

答案 2 :(得分:1)

您无法使用PROC SORT执行此操作。您需要将数据拆分为已排序和未排序的数据集,然后将其合并为一对一,而不是" by"使用数据步骤的语句。 http://support.sas.com/documentation/cdl/en/basess/58133/HTML/default/viewer.htm#a001318478.htm

此致 瓦西里