【问题标题】:Creating variables based on other variables in SAS根据 SAS 中的其他变量创建变量
【发布时间】:2019-11-24 01:52:57
【问题描述】:

我正在寻找基于此数据样本的变量:

Video     Subject    Pre_post    Pre_Post_ID
  1          1          0             1
  1          2          0             1
  1          2          0             1
  1          3          0             1
  1          3          0             1
  2          1          1             1
  2          1          1             1
  2          2          1             1
  2          2          1             1
  2          3          1             1
  4          1          0             2
  4          2          0             2
  4          2          0             2
  4          3          0             2
  4          3          0             2
  5          1          1             2
  5          1          1             2
  5          2          1             2
  5          2          1             2
  5          3          1             2

变量的目标是在 pre_post_id 相同的情况下创建一个 ID,将 pre_post 变量链接到主题:

Video     Subject    Pre_post    Pre_Post_ID   Subject_P_P_ID
  1          1          0             1               1
  1          2          0             1               2
  1          2          0             1               2
  1          3          0             1               3
  1          3          0             1               3
  2          1          1             1               1
  2          1          1             1               1
  2          2          1             1               2
  2          2          1             1               2
  2          3          1             1               3
  4          1          0             2               4
  4          2          0             2               5
  4          2          0             2               5
  4          3          0             2               6
  4          3          0             2               6
  5          1          1             2               4
  5          1          1             2               4
  5          2          1             2               5
  5          2          1             2               5
  5          3          1             2               6

提前感谢您的帮助!

【问题讨论】:

    标签: sas


    【解决方案1】:

    您需要将(<pre_post_id>,<subject>) 作为复合键 进行跟踪,并在每次遇到新的对(或键)时递增Subject_P_P_ID

    为了简化讨论,请将这对中的两个项目称为item1item2

    这里有两种方法:

    • 使用基于自动first. 变量 -- pair_id + (first.item2) 的逻辑对by item1 item2 进行排序,逐步检查BY item1 item2 并跟踪对计数,或者
    • 当键查找失败时,将对作为哈希键跟踪并分配新 id 为 <hash>.num_items + 1

    排序 + 数据步骤 + 还原排序

    proc sort data=have out=have_sorted;
      by item1 item2;
    run;
    data have_sequenced;
      set have_sorted;
      by item1 item2;
      item1_item2_pair_id + (first.item2);
    run;
    proc sort data=have_sequenced out=want;
      by video subject pre_post pre_post_id item1_item2_pair_id;
    run;
    

    哈希

    data want;
      set have;
      if _n_=1 then do;
        declare hash lookup();
        lookup.defineKeys('item1', 'item2');
        lookup.defineData('item1_item2_pair_id');
        lookup.defineDone();
      end;
      if lookup.find() ne 0 then do;
        item1_item2_pair_id = lookup.num_items+1;
        lookup.add();
      end;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      相关资源
      最近更新 更多