2016-12-23 75 views
0
proc iml; 
use rdata3; 
read all var _all_ into pp; 
close rdata3; 
do i = 1 to 1050; 
    perms = allperm(pp[i, ]); 
    create pp&i from perms[colname= {"Best" "NA1" "NA2" "Worst"}]; 
    append from perms; 
    close pp&i; 
end; 

我想通過do循環使用上述代碼在SAS中創建多個數據集。但是,我似乎無法改變使用& i指標的每個數據集的名稱。任何人都可以幫我改變我的代碼,讓我創建多個數據集?或者有沒有其他方法可以解決如何從矩陣到循環創建多個數據集?提前致謝。如何使用循環在SAS中創建多個數據集

回答

2

您不想使用要使用IML功能的宏變量。但是,您將創建大量的數據集。

data rdata3; 
    x = 1; 
    y = 2; 
    a = 4; 
    b = 5; 
    output; 
    output; 
    run; 
proc iml; 
    use rdata3; 
    read all var _all_ into pp; 
    close rdata3; 
    do i = 1 to nrow(pp); 
     outname = cats('pp',putn(i,'z5.')); 
     perms = allperm(pp[i, ]); 
     create (outname) from perms[colname= {"Best" "NA1" "NA2" "Worst"}]; 
     append from perms; 
     close (outname); 
     end; 
    quit; 

您可以將ID變量添加到PERMS並將所有版本的PERMS附加到一個數據集中。我不確定我是否使用了最好的IML技術,我知道IML足夠危險。

proc iml; 
    use rdata3; 
    read all var _all_ into pp; 
    close rdata3; 
    perms = j(1,5,0); 
    create PP_out from perms[colname= {'ID' "Best" "NA1" "NA2" "Worst"}]; 
    do i = 1 to nrow(pp); 
     perms = allperm(pp[i, ]); 
     perms = j(nrow(perms),1,i)||perms; 
     append from perms; 
     end; 
    close PP_out; 
    quit; 
+1

我同意data_null_。您可能需要爲每組置換添加一個ID變量,然後編寫一個包含所有數據的單個數據集。然後您可以使用BY組處理來分析數據。 – Rick

+0

我應該如何將幾個數據集合到一個數據集中?我認爲這是一個更好的主意 – Sopon

+0

非常感謝!你能幫我解決我發佈的其他問題嗎? – Sopon

相關問題