我有一個大的sas數據集(1.5m obs,〜250個變量),我需要將其分割成幾個大小相同的小型sas數據集以進行批處理。每個數據集都需要包含所有變量,但只包含部分obs。這樣做的最快方法是什麼?劃分一個sas數據集以進行批處理的最快方法是什麼?
1
A
回答
2
你可以做類似如下:
%macro splitds(inlib=,inds=,splitnum=,outid=);
proc sql noprint;
select nobs into :nobs
from sashelp.vtable
where libname=upcase("&inlib") and memname=upcase("&inds");
quit;
%put Number of observations in &inlib..&inds.: &nobs;
data %do i=1 %to &splitnum.;
&outid.&i
%end;;
set &inds.;
%do j=1 %to (&splitnum.-1);
%if &j.=1 %then %do;
if
%end;
%else %do;
else if
%end;
_n_<=((&nobs./&splitnum.)*&j.) then output &outid.&j.;
%end;
else output &outid.&splitnum.;
run;
%mend;
一個例子來電MYLIB.MYDATA分成10個數據集命名NEWDATA1 - NEWDATA10是:
%splitds(inlib=mylib,inds=mydata,splitnum=10,outid=newdata);
1
試試這個。我還沒有測試,所以期待一個錯誤的地方。您將需要編輯BATCH_PROCESS宏調用,包括數據集的名稱,新的數據集數等
%macro nobs (dsn);
%local nobs dsid rc;
%let nobs=0;
%let dsid = %sysfunc(open(&dsn));
%if &dsid %then %do;
%let nobs = %sysfunc(attrn(&dsid,NOBS));
%end;
%else %put Open for dataset &dsn failed - %sysfunc(sysmsg());
%let rc = %sysfunc(close(&dsid));
&nobs
%mend nobs;
%macro batch_process(dsn_in,dsn_out_prefix,number_of_dsns);
%let dsn_obs = &nobs(&dsn_in);
%let obs_per_dsn = %sysevalf(&dsn_obs/&number_of_dsns);
data
%do i = 1 %to &number_of_dsns;
&dsn_out_prefix.&i
%end;
;
set &dsn_in;
drop _count;
retain _count 0;
_count = _count + 1;
%do i = 1 %to &number_of_dsns;
if (1 + ((&i - 1) * &obs_per_dsn)) <= _count <= (&i * &obs_per_dsn) then do;
output &dsn_out_prefix.&i;
end;
%end;
run;
%mend batch_process;
%batch_process(dsn_in=DSN_NAME , dsn_out_prefix = PREFIX_ , number_of_dsns = 5);
+0
謝謝!我在思考類似的方法,但有一些不同:使用\ _n \ _而不是生成自己的行計數器,並在每個輸出數據集中對\ _n \ _應用where子句。對這種方法有任何想法? – user667489 2012-02-25 10:26:34
相關問題
- 1. SAS phreg。如何劃分數據集以進行分離分析?
- 2. 預處理數據的最快方法是什麼?
- 3. 什麼是一些最快的方法來處理這個?
- 4. Android中處理大量數據的最快方式是什麼?
- 5. 更新R中數據集的最快方法是什麼?
- 6. 什麼是對numpy數組進行取樣的最快方法?
- 7. 根據數組分配變量的最快方法是什麼?
- 8. 批處理編譯.fla文件的最佳方法是什麼?
- 9. 更新數據庫中多行的最快方法是什麼?
- 10. 什麼是使用underscore.js對數組進行分類的最快方法?
- 11. 處理三維體素數據的最佳方法是什麼?
- 12. 處理元素集合的最佳方法是什麼?
- 13. F#GPU編程vs KDB處理數據,最快的是什麼?
- 14. C#,LINQ批處理項目 - 執行此操作的最佳方法是什麼?
- 15. 什麼是用異常進行批處理的慣用斯卡拉方法
- 16. 將一組大數據與另一組數據進行比較的絕對最快方法是什麼?
- 17. 用Java訪問數據集的最快方式是什麼?
- 18. Mysql:處理餐廳等平均評分數據的最佳方法是什麼?
- 19. 預處理匿名數據以進行預測分析的步驟是什麼?
- 20. 什麼是一個快速的方法來在python中進行括號分割?
- 21. 是否可以對項目元數據進行批處理?
- 22. 分批以最快的方式
- 23. 寫入批處理腳本的最佳方式是什麼?
- 24. 什麼是排序依據年齡的人一個數組的最快方法?
- 25. 算法:什麼是檢查集合包含的最快方法?
- 26. 什麼是檢測SAS中最大變量值的最快方法
- 27. 處理DialogFragment行爲的最佳方法是什麼?
- 28. 什麼是創建一個集合時處理空*參數的pythonic方法?
- 29. 什麼是SQL插入一堆行的最快方法
- 30. 在Delphi中解析一行最快的方法是什麼?
這看起來很有希望:http://support.sas.com/resources/papers/proceedings10/109-2010.pdf – sasfrog 2012-02-25 21:20:05