假设我有一个数据集:
Product DMA Home_sales
A 1 5
A 2 12
A 3 13
B 1 5
B 2 12
B 3 13
是否有简单的方法/捷径来获取数据集,其中包含按产品划分的变量:
Product DMA Home_sales_A Home_sales_B
A 1 5 0
A 2 12 0
A 3 13 0
B 1 0 5
B 2 0 12
B 3 0 13
我有100个变量需要按产品进行此类转换,因此编写多个if语句或是否有更有效的方法是唯一的操作过程?
答案 0 :(得分:2)
您可以尝试通过SQL使用宏执行此操作:
DATA have;
INPUT Product $ DMA Home_sales;
CARDS;
A 1 5
A 2 12
A 3 13
B 1 5
B 2 12
B 3 13
;
%macro transform_product();
PROC SQL noprint;
* get product names ;
SELECT distinct Product into :products SEPARATED BY " " FROM have;
* create columns for sales using case ;
CREATE TABLE want as SELECT *
%do i=1 %to %SYSFUNC(countw(&products.));
%LET prod=%SYSFUNC(scan(&products.,&i.," "));
,CASE WHEN Product="&prod." then Home_sales else 0 end as Home_Sales_&prod.
%end;
FROM have;
QUIT;
%mend transform_product;
%transform_product();
答案 1 :(得分:1)
这是一种方式,但您需要提前知道组的数量。这将计算该值,然后在下一步中使用它。
>=3.10.10