2016-05-26 105 views
0

我們正在將代碼轉換到SAS網格,我們使用Enterprise Guide 6.1運行SAS 9.4。一塊代碼給出的結果與我們在PC上運行SAS 9.3時得到的結果不同。我創建了一個示例數據集和代碼,它返回不同的結果。在網格上運行的結果(包含13個重複行)是在select語句中包含列時的預期行爲,但不會將其聚合或在組中使用它。使用SAS 9.3(6個不同的行)運行它的結果是我們想要的,但不是典型的SAS行爲。我已經修改了代碼(通過添加denom)以在網格上獲得所需的結果,但想知道爲什麼代碼在不同的環境中運行時返回不同的結果。有任何想法嗎?Proc SQL在SAS網格和SAS 9.3上使用SAS 9.4提供不同結果

ETA:網格使用SAS 9.4,修改後的代碼使用組中的denom。另外,我無法找到Proc SQL從V 9.3到V 9.4的更改文檔。

proc sql; 
    create table work.test 
    (state char(2) 
    ,county char(20) 
    ,city char(20) 
    ,id char(6));  
quit; 

proc sql; 
    insert into work.test (state, county, city, id) 
    values ('OH', 'Hamilton', 'Cincinnati', 'abc') 
    values ('OH', 'Hamilton', 'Cincinnati', 'def') 
    values ('OH', 'Hamilton', 'Cincinnati', 'ghi') 
    values ('OH', 'Hamilton', 'Mariemont', 'jkl') 
    values ('OH', 'Hamilton', 'Mariemont', 'mno') 
    values ('OH', 'Franklin', 'Columbus', 'pqr') 
    values ('OH', 'Franklin', 'Columbus', 'stu') 
    values ('TX', 'San Patricio', 'Ingleside', 'abc') 
    values ('TX', 'San Patricio', 'Taft', 'abc') 
    values ('TX', 'Nueces', 'Corpus Christi', 'abc') 
    values ('TX', 'Nueces', 'Corpus Christi', 'xyz') 
    values ('TX', 'Nueces', 'Corpus Christi', 'tuv') 
    values ('TX', 'Nueces', 'Corpus Christi', 'def'); 
quit; 

proc sql; 
    create table freqs as 
    select a.state 
    , a.county 
    , a.city 
    , count(city) as numer 
    , denom 
    , round(count(city)/denom*100,.1) as percent 
    from work.test as a, 
    (select state, county, count(*) as denom from work.test group by state, county) as b 
    where a.state=b.state and a.county=b.county 
    group by a.state, a.county, a.city; 
quit; 
+1

提高SAS支持的票證。 – Tom

+0

請參閱編輯我的答案。看起來像一個已知的問題已經在9.3 Hot Fix中修復:http://support.sas.com/kb/46/832.html – DomPazz

+0

請注意,SAS 9.2與SAS 9.3的功能相同。 SAS 9.4已經失去了DENOM在STATE,CITY層面的知識,因此不需要重新組合。 – Tom

回答

1

在一天結束時,您的查詢寫得不好。

如果你看一下日誌,你會看到這樣的提示:

注:查詢需要remerging彙總統計回來的 原始數據。

原因是denom不是摘要變量。這會導致您的額外記錄。這應該是你的查詢的行爲 - 13行與dups。

處理順序是加入表格,然後執行彙總計算。當GROUP BY聲明不完整時,您會得到NOTE:

b.denom添加到組,您將得到預期的6行。

至於爲什麼SAS給你不同的結果:我懷疑GRID上的SAS版本與你在PC上的版本不同。

編輯: 我認爲這是SAS注意,詳細說明問題。他們將它固定在9.3的熱修復版本中,並且已經成爲開箱即用的9.4的一部分: http://support.sas.com/kb/46/832.html

+0

是的。我同意。我會自己以不同的方式編寫代碼。 –

+0

我在使用SAS 9.4的網格上運行時看到了該注意事項。這是我所期望的。我已經修改了代碼以在羣組中包含denom,以便在Grid上運行。我查看了9.4版的SAS文檔,並沒有發現對Proc SQL的任何更改。雖然現在有FedSQL。我只是困惑,SAS 9.3沒有生成該註釋,只輸出6行。這不是9.3的典型行爲。 –

+0

謝謝!這就是爲什麼我沒有在9.4的文檔中看到它。我將讓我們的管理員應用Hot Fix(並檢查其他人)。 –