我有以下结构的数据集:
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转置,但结果不是我想要的。
答案 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;