簡體   English   中英

如何使用 SAS 企業指南中 PROC SQL / SAS 代碼中的其他 2 列中的值填充列?

[英]How to fill column using values in 2 other columns in PROC SQL / SAS code in SAS Enterprise Guide?

我在 SAS 企業指南中有如下表:

數據類型:

  • VAL1 - 字符

  • ID - 數字

  • VAL2 - 字符(只有 3 個可能的值:P、C、S)

    ID 事件 年級
    123 紐約
    123 紐約
    123 紐約 小號
    55 瘋狂的 C
    55 瘋狂的 小號
    55 倫敦 小號
  • ID - 帶有 ID 的列

  • EVENT - 事件名稱

  • GRADE - 事件評估(標記)

我需要創建一個表,其中將是事件的 ID、EVENT 和 GRADE,但是:

  • P 級或 C 比 S 級更重要,所以如果某些配對 ID - EVENT 有 P 或 C 那么這對 ID - EVENT 有 P 或 Z0D61F8370CAD1D412F8ZB84D143E15
  • 當某些 ID-EVENT 對只有 S 級(沒有 P 或 C)時,則保持 S

因此,我需要以下內容:

ID  |EVENT|GRADE
----|-----|----
123 | NY  | P  --> because P is more important than S
55  | MAD | C  --> because C is more important than S
55  | LON | S  --> because has only S

如何在普通 SAS 代碼或企業指南中的 PROC SQL 中執行此操作? :)

這是一個基於 SQL 的解決方案,假設CP僅在每個 id 和事件中出現一次。 我們將為CPS賦值:

C, P = 1
S    = 2

如果我們在每個(id, event)中取最小值,我們將得到一個按層次順序排列的唯一 ID 和事件列表。

proc sql;
    create table want(drop=value) as
        select distinct 
            id
          , event
          , grade
          , CASE when grade IN('C', 'P') then 1 else 2 END as value
        from have
        group by id, event
        having value = min(value)
    ;
quit;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM