Tricky SAS转置任务

时间:2017-04-27 03:44:10

标签: sas

我有以下结构的数据集:

Application_ID  Product_ID  Product1_Category   Product2_Category
11111           a           m1                  m3
11111           b           n2                  n4
11111                       k3                  k5
11111                       t3                  t7

如您所见,此应用程序中有两个product_id。每个产品都对应于他们的product_category。当产品ID按顺序出现时,第一个产品ID将对应于Product1_Category,依此类推。由于奇怪的数据结构,我不能使用proc转置程序。结果如下:

Application_ID  Product_ID  Product_Category
11111           a           m1
11111           a           n2
11111           a           k3
11111           a           t3
11112           b           m3
11113           b           n4
11114           b           k5
11115           b           t7

我试过使用proc转置,但结果不是我想要的。

1 个答案:

答案 0 :(得分:0)

看起来前N行有CATEGORY_ID变量的值? 如果是这样,那么只需使用标准数组方法进行转换,但添加代码以从前N行中相应的一行更新PRODUCT_ID。

data have;
  input Application_ID $ Product_ID $ Product1_Category $ Product2_Category $;
datalines;
11111 a m1 m3
11111 b n2 n4
11111 . k3 k5
11111 . t3 t7
;

%let varlist=product1_Category product2_category ;
data want ;
  set have ;
  array p &varlist ;
  do i=1 to dim(p);
    if i <= nobs then set have(keep=product_id) point=i nobs=nobs;
    Product_Category=p(i);
    output;
  end;
  drop &varlist;
run;
proc print; run;

enter image description here