2017-09-25 110 views
-1

我有一个SAS问题。我有一个包含ID和年份的数据集。我想创建虚拟变量“2011”和“2012”,如果ID在给定年份中有观察值,则应该取值1,否则为0。例如。 ID 2应该有2011 = 1和2012 = 0,因为该ID只有2011年的观察。在SAS中跟踪ID

ID Year 2011 2012 
1 2011  1  1 
1 2012  1  1 
2 2011  1  0 
3 2012  0  1 

任何人都可以帮忙吗?谢谢!

回答

0

首先,20112012不是SAS变量的有效名称。 SAS变量必须以字母或下划线开头(例如,_2011)。

如果您确实需要,可以通过设置系统选项validvarname=any并用单引号括住“无效”变量名称并附加n来解决该限制。

这会做你想要什么:

data have; 
infile datalines; 
input ID year; 
datalines; 
1 2011 
1 2012 
2 2011 
3 2012 
; 
run; 

options validvarname=ANY; 
proc sql; 
create table want as 
select ID 
     ,year 
     ,exists(select * from have b where year=2011 and a.id=b.id) as '2011'n 
     ,exists(select * from have b where year=2012 and a.id=b.id) as '2012'n 
from have a 
; 
quit; 
+0

@ user2877959至少我的SAS需要n个后点: “作为“2011'n。” 才能正常工作。 – pinegulf

+0

@pinegulf看起来不对 – user2877959

+0

不幸的是,我不能让程序代码与我的数据集一起工作。也许有一种解决方法,但我不熟悉PROC SQL语法。 我所拥有的是一个大型数据集,它包含唯一ID和一系列时间序列中每年的变量。一些ID存在于整个时间序列中,一些新的ID被添加并且一些旧的ID被删除。我想知道哪些ID是新的,哪些在特定年份被删除。你有什么建议如何做到这一点? –