2017-08-08 87 views
0

在SAS,我已經運行一個簡單的線性迴歸和輸出我的結果​​3210(列包括殘差,預測,標準誤差)使用以下代碼返回只有一行:SAS MERGE

proc reg data=model_file; 
model &y = &x; 
output out=work.outdata r=resid; 
title 'model'; 
run; quit; 

我想將此輸出數據加回到原始數據集work.modeldata。我想加入的ID是u_id。我用下面的代碼在同一個宏可以這樣做:

data work.mergedf; 
    merge work.modeldata work.outdata; 
    by u_id; 
run; 

不過,我最近被合併的數據集只包含一個行(我有幾千行),與u_id = 1 - 該行確實是合併雖然正確。我瀏覽了SAS文檔here,並相信我已經正確地對數據集進行了排序 - 所有ID均按升序排序並似乎與每個數據集匹配。但是,日誌文件返回相同的錯誤:

ERROR: BY variables are not properly sorted on data set WORK.MODELDATA.

我真的在對什麼是造成這個問題的損失。我試圖使用PROC SORT,但日誌文件有沒有人有任何見解,爲什麼只有一行被返回?

編輯:感謝喬的建議(看看接受的答案),我能夠得到這個工作。下面是我用最後的代碼生成了正確的合併:

proc sort data=work.model_file; by u_id; run; 
proc sort data=work.outdata; by u_id; run; 

data work.merged_data; 
    merge work.model_file work.outdata; 
    by u_id; 
run; 
+0

MODELDATA從哪裏來?您的PROC REG只能引用MODEL_FILE和OUTDATA。 –

+0

@data_null_這是一樣的。我只是重新命名了它,並忘記在發佈到SO時更改變量名稱。 –

+0

什麼變量是'U_ID',爲什麼你會認爲在你的代碼中提到的三個數據集中的任何一個都會被該變量排序? – Tom

回答

1

這是不可能回答這個沒有看到您的實際數據,但什麼可以公佈是因爲「當我覺得我的數據集進行排序做哪些步驟但SAS不同意「。

  1. 在兩個數據集上運行PROC SORT。即使你認爲他們已經排序。如果他們已經排序並且SAS已經知道他們,他們甚至不會對他們進行排序,但否則這將使他們按照SAS希望他們的方式行事。
  2. 如果您使用的是備用DBMS中的數據而不是SAS(例如來自SQL Server,Oracle,Hadoop等),請不要直接在該DBMS的數據上運行PROC SORT:將其作爲SAS數據集引入SAS,然後PROC SORT該數據集。有時,其他DBMS會針對如何處理您不一定需要的某些案例做出不同的選擇。
  3. 確保兩個數據集具有相同的可變長度。這很容易成爲他們不知道的問題。
  4. 確保你確實有BY變量正確,並且它有一些東西。我有空白BY變量的次數,或者與我預期不同的事情的次數太高,以至於不能留下這些看似明顯的細節。
+0

這些都是很好的建議。數據根本無法發佈,不幸的是,我知道這在調試方面有點限制。我最終完成了它的工作,並且確實涉及到正確排序兩個數據集。我對我的問題進行了編輯以反映幫助! –