2016-11-14 93 views
0

我有一个数据集,看起来像如何操纵这个数据集来创建一个新列?

ID retailer  
1 A    
2 A    
1 B    
3 C     
3 B     

我想是一个数据与每个不同的零售商表示,如果ID与零售商(如布尔会做精细的东西)相关的列设置。

我可以proc sql手动做到这一点,但是这并不能一概而论好时,我有很多的零售商。

反正是有创建数据透视表与SAS?我知道proc tabulate可以做类似的事情,但我需要输出进行进一步的计算。

Desired output: 

ID A B C  
1 1 1 0 
2 1 0 0 
3 0 1 1 

回答

1

SAS真的不能做透视表,但你肯定可以换你的行使用转procecure列 - 如下:

data have; 
input ID $ retailer $ ; 
retain count 1; /* NOTE - this bit is necessary to have in your source */ 
datalines; 
1 A    
2 A    
1 B    
3 C     
3 B 
; 
run; 

/* sort to enable transpose */ 
proc sort; by id;run; 

/* transpose data */ 
proc transpose data=have out=want (drop=_name_); 
    by id; 
    id retailer; 
run; 

/* turn missings into zeros */ 
proc stdize data=want reponly missing=0; 
run; 

example result

+0

感谢您的回答。当我在我的数据上运行你的代码时,proc tranpose返回一个空表。任何想法,为什么这可能是? –

+0

你会在日志中看到任何警告或错误吗?也许开始一个新的会话。如果你有错误,有时系统选项obs被设置为零。该代码对所提供的样本数据有效。你是否通过ID对输入表进行排序? –

+0

日志中没有错误。开始一个新的会话,仍然是空表。是的,我通过id对输入表进行排序。 –