我在SAS中使用Proc SQL。
当我在主查询中使用GROUP BY语句时,我得到这个错误:NOTE: A GROUP BY clause has been discarded because neither the SELECT clause nor the optional HAVING clause of the associated table-expression referenced a summary function.
SELECT
HP.Area
,HP.Name
,HP.NPI
,FACILITIES.ID
,(SELECT COUNT(*) FROM EVAL.CITATIONS C
WHERE C.ID = CITATIONS.ID
) AS Total_Citations
FROM EVAL.HP HP
LEFT JOIN EVAL.FACILITIES FACILITIES
ON FACILITIES.NPI = HP.NPI
LEFT JOIN EVAL.CITATIONS CITATIONS
ON CITATIONS.ID = FACILITIES.ID
GROUP BY CITATIONS.ID
当我运行这个程序时:
- 我得到重复的结果
- total_references统计引用表中的所有行,因为它忽略了group by语句。 输出:
NPI | Total_Citations |
---|---|
17026 |
我建议如下:
proc sql;
SELECT
HP.Area
,HP.Name
,HP.NPI
,HP.ID
,COUNT(*) AS Total_Citations
FROM EVAL.HP
LEFT JOIN EVAL.CITATIONS
ON CITATIONS.ID = HP.ID
GROUP BY HP.Area, HP.Name, HP.NPI, HP.ID;
quit;
在这里,HP表用于获取区域、名称等,并且该表与references表连接。子查询不是必需的,因为连接已经为您提供了每个ID所需的引用数。如果您希望在结果表中包含Area、Name和ID,那么您也应该在group-by子句中添加这些列。我看不出第三个表的相关性,但是如果你需要FACILITIES表中的列,那么你可以连接这个表和需要的列,但是把这些列也放在group-by中。注意:如果在FACILITIES表中有多个ID条目,那么您将再次得到重复的结果。