2017-09-25 79 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是新的,哪些在特定年份被刪除。你有什麼建議如何做到這一點? –