2016-09-28 84 views
-1

我想要將一千多家公司的返回數據轉換爲面板格式。轉換爲面板數據的最佳技術

從我的理解來看,它既不是真正的寬,也不是長的形式(至少從我見過的例子中)。

我附上了一個原始數據集的例子和我想要的樣子。有沒有辦法做到這一點?我在Excel/VBA中間,並且是SAS/Stata中的新人,但可以使用他們並自學自己。

enter image description here

+0

這是完全寬泛的數據,基本的Proc轉置是SAS所需要的。如果您無法確定代碼,請發佈您嘗試過的內容。提示:只指定您的輸入和輸出數據集,並按日期變量。 – Reeza

+0

請參閱Stata中的「幫助重塑」。 – ander2ed

+0

這裏的好問題顯示_some_試圖在代碼和(在此領域)可以複製和粘貼的數據示例。 –

回答

3

在Stata使用reshape考慮這個例子:

clear * 
input float(date FIRM_A FIRM_B FIRM_C FIRM_D) 
1 .14304407 .8583148 .3699433 .7310092 
2 .34405795 .9531917 .6376472 .2895169 
3 .04766626 .6588161 .6988417 .5564945 
4 .21615694 .18380463 .4781089 .3058527 
5 .709911  .85116 .14080866 .10687433 
6 .3805699 .070911616 .55129284 .8039169 
7 .1680727 .7267236 .1779183 .51454383 
8 .3610604 .1578059 .15383714 .9001798 
9 .7081585 .9755411 .28951603 .20034006 
10 .27780765 .8351805 .04982195 .3929535 
end 

reshape long FIRM_, i(date) j(Firm_ID) string 
rename FIRM_ return 
replace Firm_ID = "Firm " + Firm_ID 

list in 1/8, sepby(date) 
    +---------------------------+ 
    | date Firm_ID  return | 
    |---------------------------| 
    1. | 1 Firm A .1430441 | 
    2. | 1 Firm B .8583148 | 
    3. | 1 Firm C .3699433 | 
    4. | 1 Firm D .7310092 | 
    |---------------------------| 
    5. | 2 Firm A .3440579 | 
    6. | 2 Firm B .9531917 | 
    7. | 2 Firm C .6376472 | 
    8. | 2 Firm D .2895169 | 
    +---------------------------+ 

看到help reshape更多的話題。

+0

感謝您的回覆。這看起來與我所需要的東西非常接近,但實際上,我之後的產出需要按照日期順序和相應的回報升序來對企業A進行所有的觀察。 我會如何改變它來獲得? – elbarto

+3

您可以事後對其進行分類... – Reeza

+0

這仍然存在問題。我不知道如何在同一時間按升序日期和升序ID排序。 也就是說,將日期升序爲id = 1,然後循環回到開始,併爲id = 2升序。 我嘗試過'gsort + date + id'無效 – elbarto

3

這可以很容易在SAS proc transpose來完成。您將需要添加的是A列的名稱。這將是您的by變量,以便以下變量將在每個特定日期進行調換。除此之外,請確保您的數據按日期列排序。該代碼將類似於此:

proc sort data=have; 
by date; 
run; 

proc transpose data=have out=want; /* you could add a name= or prefix= statement here to rename your variables */ 
by date; 
run;