我想知道我们是否可以在sas中订购一列并保持其他变量的相同顺序。 通常,我们使用
proc sort
与" by
"但这会根据" by
"中使用的变量更改所有变量的顺序。
感谢您的帮助
答案 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
此致 瓦西里