【问题标题】:SAS Create conditional duplicate rows - repeating rows for an instance and assigning weight to the duplicate rowsSAS Create conditional duplicate rows - 为实例重复行并为重复行分配权重
【发布时间】:2022-12-01 08:05:43
【问题描述】:

我需要转换我的数据以输入到模型中。我正在用 sas 做这个。下面是数据的原始格式和模型将接受的两个选项。选项 2 是理想的。有没有办法在SAS中做到这一点?我一直在尝试提出数据步骤,但最终陷入困境。

原始数据格式

ID Total Risk
recordA 3 3
recordB 5 2

选项1:

ID Target
recordA 1
recordA 1
recordA 1
recordB 1
recordB 1
recordB 0
recordB 0
recordB 0

选项#2:

ID Target Weight
recordA 1 3
recordB 1 2
recordB 0 3

我尝试减去列并为 Risk>0 然后 Target 1 else 0 制作一个标志,但遇到创建重复记录的问题

【问题讨论】:

  • 为什么选项2中B有2个obs,A有1个obs?
  • 记录 B 的 1 个实例,其中风险(我的目标)=1,3 个实例不是。总计 =3 风险 + 2 无风险,或者换句话说,总计 = 3 次记录 B 作为目标 =1。

标签: sas sas-macro


【解决方案1】:

您可以使用带有两个 output 语句的数据步骤来执行此操作。 weighttarget = 1 时总是等于risk,我们总是希望有一个输出行。如果total不等于weight,那么我们需要创建第二个输出行,其中target = 0。在这种情况下,重量是total - risk

data want;
    set have;
    
    target = 1;
    weight = risk;
    output;

    if(total NE risk) then do;
        target = 0;
        weight = total - risk;
        output;
    end;

    keep id target weight;
run;

输出:

id        target   weight
recordA   1        3
recordB   1        2
recordB   0        3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2017-11-24
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多