简体   繁体   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?

I have table in SAS Enterprise Guide like below:我在 SAS 企业指南中有如下表:

Data types:数据类型:

  • VAL1 - character VAL1 - 字符

  • ID - numeric ID - 数字

  • VAL2 - character (with only 3 possible values: P, C, S) VAL2 - 字符(只有 3 个可能的值:P、C、S)

    ID ID EVENT事件 GRADE年级
    123 123 NY纽约 P
    123 123 NY纽约 P
    123 123 NY纽约 S小号
    55 55 MAD疯狂的 C C
    55 55 MAD疯狂的 S小号
    55 55 LON伦敦 S小号
  • ID - column with ID ID - 带有 ID 的列

  • EVENT - event name EVENT - 事件名称

  • GRADE - evaluation of the event (mark) GRADE - 事件评估(标记)

And I need to create table where will be ID, EVENT and GRADE of event, but:我需要创建一个表,其中将是事件的 ID、EVENT 和 GRADE,但是:

  • grade P or C are more important that grade S, so if some pair ID - EVENT has P or C then this pair ID - EVENT has P or C P 级或 C 比 S 级更重要,所以如果某些配对 ID - EVENT 有 P 或 C 那么这对 ID - EVENT 有 P 或 Z0D61F8370CAD1D412F8ZB84D143E15
  • when some pair ID-EVENT has only grade S (without P or C) then stay S当某些 ID-EVENT 对只有 S 级(没有 P 或 C)时,则保持 S

So as a result I need something like below:因此,我需要以下内容:

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

How can I do that in normal SAS code or in PROC SQL in Enterprise Guide?如何在普通 SAS 代码或企业指南中的 PROC SQL 中执行此操作? :) :)

Here is a SQL-based solution that will work assuming C and P only occur once per id & event.这是一个基于 SQL 的解决方案,假设CP仅在每个 id 和事件中出现一次。 We'll assign values to C , P , and S :我们将为CPS赋值:

C, P = 1
S    = 2

If we take the minimum of those values per (id, event) , we will be left with a unique list of IDs and events in a hierarchical order.如果我们在每个(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.

相关问题 如何在 PROC SQL 中使用 SAS 企业指南中每月值的总和创建新列? - How to create new column in PROC SQL with sum of values per month in SAS enterprise Guide? SAS Enterprise Guide proc sql - 使用 when 语句包含在内 - SAS Enterprise Guide proc sql - using when statements inclusively 如何在 SAS 企业指南中的 PROC SQL 的某些日期中的 2 列之间更改值来创建 0/1 标志? - How to create 0/1 flag witch infrom whether values were changed between 2 column in some dates in PROC SQL in SAS Enterprise Guide? 如何在 SAS 企业指南中仅使用 PROC SQL select char 变量? - How to select only char variables with PROC SQL in SAS Enterprise Guide? 如何在 SAS 企业指南中的 PROC SQL 的两列之间创建标志 0/1 通知是否在 4 个月内更改? - How to create flag 0/1 inform whether was changed or not during 4 months between two columns in PROC SQL in SAS Enterprise Guide? 如何在 SAS 企业指南中的 PROC SQL 中创建标志通知 ID 上的两列是否有变化? - How to create flag inform whether was some change in two columns on ID in PROC SQL in SAS Enterprise Guide? 如何使用 SQL 中一列的值创建列(SAS 中的 PROC SQL) - How to create columns using values from one column in SQL (PROC SQL in SAS) 如何计算在 SAS 企业指南中的 PROC SQL 中定义 ID 的某个值出现了多少次? - How to count how many time some value appeard with defined ID in PROC SQL in SAS Enterprise Guide? SAS企业指南/ SQL性能 - SAS Enterprise Guide / SQL Performance 如何聚合表以获取 SAS 企业指南中其他 2 列的每个组合的最小值? - How to aggregate table to take minimum VALUE for each combination of 2 other columns in SAS Enterprise Guide?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM