2017-08-09 138 views
0

我使用下面的SQL PROC步提取數據:SAS - 平衡面板數據使用PROC SQL

PROC SQL; 

create table panel as 
select ID, Month, Var1, Var2, Var3 
from data 
order by ID, Month; 
quit; 

我想利用這些數據來建立一個平衡的面板數據,但會有缺少ID,這意味着每個月份的每個變量的值應該等於零。

我無法弄清楚如何編寫一個查詢或任何數據步驟,將缺失的ID插入到每個月的數據集中,然後將零賦值爲值。

例如,我的查詢將如下表:
UNBALANCED PANEL

我的問題是,有一個ID爲「A」是不是在說我把數據表示,但ID「A 「 確實存在。另外,爲了增加複雜性,間歇性地在PROC SQL中出現ID「C」而不是每月,但是我想將它顯示爲每個月它不出現在數據庫中的零。因此,我試圖讓每個月出現已知ID的任何缺失數據,並且每個Var都有零。

例如:
BALANCED PANEL

這已被絆倒我要幾個星期,如果任何人有任何見解那麼將不勝感激!

+0

與其要求我們所有人查找平衡面板數據集是什麼,您可能很快就會定義它 –

回答

0

這不會是最優雅的解決方案,但它使用的基本代碼,很容易理解:

1)有一個數據集將所有已知的ID和月

data ids; 
infile datalines; 
input ID $; 
month='Jan'; output; 
month='Feb'; output; 
month='Mar'; output; 
month='Apr'; output; 
month='May'; output; 
month='Jun'; output; 
month='Jul'; output; 
month='Aug'; output; 
month='Sep'; output; 
month='Oct'; output; 
month='Nov'; output; 
month='Dec'; output; 
datalines; 
A 
B 
C 
D 
; 
run; 

(本例中是靜態的我不知道你的數據,但如果你可以從什麼地方拉他們,如select distinct ID, Month from table,這當然更好)

2)做你的PROC SQL像你一樣:

proc sql; 
create table panel as 
select ID, Month, Var1, Var2, Var3 
from data 
order by ID, Month; 
quit; 

3)然後右擊與「零的表連接你的結果得到那些記錄的‘失蹤的ID’

proc sql; 
create table panel_balanced as 
select coalesce(t1.ID,t2.ID) as ID 
     ,coalesce(t1.Month,t2.Month) as Month 
     ,coalesce(t1.var1,0) as var1 
     ,coalesce(t1.var2,0) as var2 
     ,coalesce(t1.var3,0) as var3 
from panel t1 
right join ids t2 
    on t1.ID=t2.ID 
    and t1.Month=t2.Month 
; 
quit; 

當然你也可以聯合執行步驟2和3成一個查詢,甚至做如果第1步中的表也可以使用SQL創建,則在一個SQL查詢中執行整個事件。