根据SAS中的其他变量创建变量

时间:2019-11-24 01:52:57

标签: sas

我正在基于此数据样本创建一个变量:

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相同的情况下,创建将pre_post变量链接到主题的ID:

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

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您将希望将成对的(<pre_post_id>,<subject>)作为组合键,并在每次遇到新的成对(或键)时递增Subject_P_P_ID

为简化讨论,请调用item1item2对中的两个项目

有两种方法:

  • by item1 item2排序,逐步进行BY item1 item2并使用基于自动first.变量(pair_id + (first.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;
相关问题