2016-05-26 72 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(并检查其他人)。 –