如何使用SAS中的数据步骤排序数据步骤

我想在SAS数据步骤中对数据进行排序。我的意思是:proc的工作应该在数据步骤中完成。有没有解决方法?如何使用SAS中的数据步骤排序数据步骤

回答:

如果您正在寻找仅限于数据步骤的解决方案,那么可以使用hash table完成PROC SORT的工作。需要注意的是,你需要足够的记忆来做到这一点。

如果你想做一个简单的排序,你会加载散列表ordered:'yes'选项,并将其输出到一个新表。默认情况下,ordered:yes将按升序对数据进行排序。您也可以指定descending

简单排序

data _null_; 

/* Sets up PDV without loading the table */

if(0) then set sashelp.class;

/* Load sashelp.class into memory ordered by Height. Do not remove duplicates. */

dcl hash sortit(dataset:'sashelp.class', ordered:'yes', multidata:'yes');

sortit.defineKey('Height'); * Order by height;

sortit.defineData(all:'yes'); * Keep all variables in the output dataset;

sortit.defineDone();

/* Output to a dataset called class_sorted */

sortit.Output(dataset:'class_sorted');

run;

去欺骗

要删除重复,做同样的操作,除了删除multidata选项。在下表中,观察值(8,9)和(15,16)是相互重复的。观察结果9和16将被消除。

data _null_; 

/* Sets up PDV without loading the table */

if(0) then set sashelp.class;

/* Load sashelp.class into memory ordered by Height. Do not keep duplicates. */

dcl hash sortit(dataset:'sashelp.class', ordered:'yes');

sortit.defineKey('Height'); * Order by height;

sortit.defineData(all:'yes'); * Keep all variables in the output dataset;

sortit.defineDone();

/* Output to a dataset called class_sorted */

sortit.Output(dataset:'class_sorted');

run;

回答:

有使用proc ds2的解决方案。

/*Just prepare dataset, because DS2 responds with an error on libraries like sashelp. */ 

data sql_prep;

set sashelp.class;

run;

/*Delete test dataset before ds2 func, to avoid errors*/

proc datasets nodetails nolist;

delete test;

run;

proc ds2;

data test;

method run();

set {select * from sql_prep order by Weight};

end;

enddata;

run;

quit;

更多info关于sashelp库的ds2错误。

Appendix转换为ds2文档,关于ds2中的sql。

回答:

斯图打我,但前提是你的数据集包含一个唯一的密钥,并且可以适合在内存中的整个事情,你可以使用一个哈希排序,如:

data _null_; 

if 0 then set sashelp.class;

declare hash h(dataset:"sashelp.class",ordered:"a");

rc = h.definekey("age","sex","name");

rc = h.definedata(ALL:'yes');

rc = h.definedone();

rc = h.output(dataset:"class_sorted");

stop;

run;

如果您确实要避免使用任何内置排序方法,特别愚蠢的方法是将整个数据集加载到一系列临时数组中,使用手动编码算法对数组进行排序,然后再次输出:

https://codereview.stackexchange.com/questions/79952/quicksort-in-sas-for-sorting-datasets

以上是 如何使用SAS中的数据步骤排序数据步骤 的全部内容, 来源链接: utcz.com/qa/261435.html

回到顶部