2016-04-21 111 views
0

感謝反饋人員,但我必須重寫問題以使其更清楚。SAS條件完全匹配

說,我們有一個表:

Table

我試圖從該表中得到的是已經匹配FP_NDT追溯到我的病情號碼的列表,例如,我想數字列表,2014年和2015年只有FP_NDT不爲null,2011,2012和2013年(與月份無關)缺失值。所以在這種情況下,我應該只能得到4號。是否可以從這張表中完成?

PS:如果我寫一個簡單的SQL SELECT語句並把一個條件像

where year(FP_NDT) in (2014,2015) 

同時,也會給我號碼2和3 ...

+0

如果您將數據粘貼爲文本而不是拍攝照片,則測試起來會更容易。 – Tom

回答

0

爲什麼不首先總結數據?

proc sql; 
    create table XX as 
    select number 
     , max(year(fp_ndt)=2011) as yr2011 
     , max(year(fp_ndt)=2012) as yr2012 
     , max(year(fp_ndt)=2013) as yr2013 
     , max(year(fp_ndt)=2014) as yr2014 
     , max(year(fp_ndt)=2015) as yr2015 
    from table1 
    group by number 
    ; 

現在很容易進行測試。

select * from XX 
    where yr2014+yr2015=2 and yr2011+yr2012+yr2013=0 
    ; 

您可以使用第一個查詢作爲子查詢而不是創建物理表。

+0

這是一個非常聰明的技巧,效果很好。非常感謝! :) – Kvadich

0

所以,你要的名字既相關聯1和2和3,但在不同的行。

您可以按名稱組行並計算相關的數字,因爲這:

PROC SQL; 
    CREATE TABLE xxx AS SELECT 
      name, 
      SUM(number=1) AS count1, 
      SUM(number=2) AS count2, 
      SUM(number=3) AS count3 
    FROM test GROUP BY name; 
QUIT; 

然後,您可以篩選基於COUNT1,共3個記錄的結果,即(count1>0 AND count2>0 AND count3>0)

+0

謝謝,這個很有意義,但是當總結很重要時,比如說我想在最近5年內失蹤2人。不幸的是,它不能幫助我確定是否需要確切的前一個和之前缺少的前一個... – Kvadich

+0

實際上它與max()的答案相同。對不起,以前沒有注意到它,謝謝! – Kvadich

0

試試這個:

proc sql; 
select * 
from work.test 
group by name having nmiss(number)=0; 
quit; 
+0

我實際上需要在結果中得到一個名稱,它具有某些數字,某些數字缺少其他數字...例如,從最後一個表格中,我怎麼才能選擇Luk?如果缺失變量的順序無關緊要,我可以按照您的建議來完成,但不幸的是,它的確如此。在這個例子中,我特別需要3失蹤盧克,而1和2不爲空... – Kvadich

0

我已經找到了一個解決辦法是實際每年創建單獨的數據集,然後內加入他們的失蹤,不爲空的需要多年的WHERE條件。然而,它涉及到60個月時會變得有點麻煩,例如...