2013-07-12 47 views
2

我想將Stata循環的結果保存到單個文件中。文件名的一個組成部分應該是在forvalues循環內分配給宏的值j如何使用Stata中的宏處理文件名

顯然我的代碼導致一個指令總是保存'1995',因此我得到的消息告訴我這個文件已經存在。任何人都有答案嗎?

我的代碼:

local j=1995 
forvalues `j'=1995/2012 { 
    clear 
    use "/Users/carl/Desktop/STATA/Neustart/eventdates.dta", clear 
    keep if eventyear== `j' 
    sort acq_cusip eventdate 
    compress 
    save "/Users/carl/Desktop/STATA/Neustart/eventdates_`j'.dta" 
} 

回答

1

在你原來的代碼塔塔看到`j'forvalues命令(而不是正確j)裏面,所以它開始評估它開始循環之前。那麼,什麼是最終運行是

forvalues 1995=1995/2012 { 

這意味着forvalues正在改變當地的宏易混淆,但在法律上稱爲`1995'年至1995年在第一次迭代,1996年在第二次迭代的內容,等等。所以,當你參考到循環內部的本地`j',它將不會改變並保持在循環前定義的原始值。

解決這個問題的方法是更換:

local j = 1995 
forvalues `j' = 1995/2012 { 

有:

forvalues j = 1995/2012 { 
+0

他告訴我「j was not found」,那麼也許是因爲如果我踢出局部的話,那麼j不存在任何定義,因此stata不知道它 – user2576879

+0

您應該只刪除'forvalues '命令,但讓他們在其他地方 –

+0

好吧,我會嘗試一秒 – user2576879

1

使用replace

save "/Users/carl/Desktop/STATA/Neustart/eventdates_`j'.dta",replace 

更新

cd "C:\Users\Vista\Desktop\Stataproject" 


forvalues j=1/5 { 
sysuse auto,clear 
     keep if rep78== `j' 
     save "auto_`j'.dta",replace 
    } 

例與塔塔汽車的數據。有關詳細信息,請參閱,Speaking Stata: How to face lists with fortitude

+0

不幸的是,這並不工作。它始終在文件名中使用「1995」。相反,我希望在1995年到2012年間每年都有一個不同名稱的文件。我的整體語法有問題嗎? – user2576879

+0

所以它通過循環運行18次,但我沒有得到18個不同的文件保存。 – user2576879

+0

但你說你總是想用'1995'保存 – Metrics

相關問題