2

forvaluesStataループの結果を個々のファイルに保存したいと考えています。ファイル名の 1 つのコンポーネントは、ループj内でマクロに割り当てられる値である必要があります。forvalues

どうやら私のコードは、常に で保存するように指示してい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"  
}

誰もそれに対する答えを持っていますか?

4

2 に答える 2

1

元のコードでは、Stata は(正しい ではなく) コマンド`j'内を参照するため、ループを開始する前に評価を開始します。したがって、最終的に実行されるのはforvaluesj

forvalues 1995=1995/2012 {

これはforvalues、ローカル マクロの内容を紛らわしく変更していることを意味しますが、合法的には ` と呼ば1995'れ、最初の繰り返しでは 1995 に、2 回目の繰り返しでは 1996 に変更されます。したがって`j'、ループ内でローカルを参照すると、変更されずにそのままになります。ループの前に定義した元の値。

これを解決する方法は、次のように置き換えることです。

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

と:

forvalues j = 1995/2012 {
于 2013-07-12T15:26:15.393 に答える