簡體   English   中英

在Stata中使用循環導出數據文件

[英]Exporting data files using loop in Stata

我有一個包含20個城市的大型數據集,我想將其分為每個城市的較小數據集。 數據集中的每個變量都將導出到文本文件中。

foreach i in Denver Blacksburg {
use "D:\Data\All\AggregatedCount.dta", clear

drop if MetroArea != `i'

export delimited lnbike using "D:\Data/`"`i'"'/DV/lnbike.txt", delimiter(tab) replace
export delimited lnped using "D:\Data/`"`i'"'/DV/lnped.txt", delimiter(tab) replace 
}

我在導出命令中嘗試了i' and “`i”“',但是它們都不起作用。 錯誤是

“找不到丹佛。”

我也有介於兩者之間的城市,例如洛杉磯。 我試過了

local city `" "Blacksburg" "Los Angeles" "Denver" "'
foreach i of city {
use "D:\Data\All\AggregatedCount.dta", clear

drop if MetroArea != `i'

export delimited lnbike using "D:/Data/`"`i'"'/DV/lnbike.txt", delimiter(tab) replace
export delimited lnped using "D:/Data/`"`i'"'/DV/lnped.txt", delimiter(tab) replace 
}

這也不起作用。 你有什么建議嗎?

如果要繼續使用Stata,則只需在第一個代碼段中進行更改,

`"`i'"'

\`i'

注意\\以便您的代碼如下所示:

export delimited lnbike using "D:\Data\\`i'/DV/lnbike.txt", delimiter(tab) replace

(無論如何,我一般都會將所有的正斜杠( / )更改為反斜杠( \\ )),但額外的一個是因為字符串中左單引號之前的反斜杠的計算結果僅為左單引號。 使用第二個反斜杠告訴Stata,您希望對本地宏i求值。

如果您也進行了更改,則第二個代碼段可能會起作用

foreach i of city {

foreach i of `city' {

仔細閱讀本地宏可能會有所幫助:它們肯定會造成混亂,但是如果您知道如何使用它們,它們將非常強大。

該答案與@Eric HB的有用答案重疊。

在給定20個(或更多)城市的情況下,您不希望鍵入那些乏味且容易出錯且不需要的城市名稱。 您也不需要一次又一次地讀取數據集,因為您只需export所需的零件即可。 這應該使您更接近。

use "D:/Data/All/AggregatedCount.dta", clear

* result is integers 1 up, with names as value labels
egen which = group(MetroArea), label 
* how many cities: r(max), the maximum, is the number  
su which, meanonly 

forval i = 1/`r(max)' { 
     * look up city name for informative filename  
     local where : label (which) `i' 
     export delimited lnbike if which == `i' using "D:/Data/`where'/DV/lnbike.txt", delimiter(tab) replace
     export delimited lnped if which == `i' using "D:/Data/`where'/DV/lnped.txt", delimiter(tab) replace 
}

有關原則尚未討論:

-在測試文字字符串時,您需要使用" "或復合雙引號來分隔此類字符串。 否則,Stata認為您的意思是變量或標量名稱。 如給定的,這是您的第一個錯誤

drop if MetroArea != `i' 

解釋為

drop if MetroArea != Denver 

Stata找不到變量Denver 如您所見,您需要

drop if MetroArea != "`i'" 

-Windows使用反斜杠作為文件名和目錄名的分隔符,但Stata也使用反斜杠作為轉義符。 如果在此類文件分隔符之后使用本地宏名稱,則結果可能會很錯誤。 本手冊的章節 [U] 18.3.11和本說明對此進行了記錄 正斜杠從來都不是問題,即使在Windows中,Stata都能按需理解斜杠。

綜上所述,很難相信擁有許多小文件會更好,但這取決於您要如何處理它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM