遍历文件夹以生成并保存每个文件的图形

时间:2018-07-30 02:57:34

标签: stata stata-macros

下面是我从csv创建的dataex文件之一,作为可重复的示例:

clear

input str32 eventname str10 scrapedate float(average thpercentile v5 v6)
"EventName" "2015-12-15"  136.9255     83.2 104.875    148.75
"EventName" "2015-12-16"  130.4555    78.55      99    138.22
"EventName" "2015-12-17" 123.66705     72.7   90.25     131.2
"EventName" "2015-12-18" 116.45757   64.855   78.55     119.5
"EventName" "2015-12-19" 108.63446 60.56333    72.7 119.07333
"EventName" "2015-12-20"  94.97125    55.15   69.77    112.48
end

由于对我的previous question的回答,我能够修改我的代码以遍历目录"I:\Games CSVs\"并使用以下命令读取每个csv文件:

insheet using "`file'", comma clear

然后创建一个新变量,以将数据格式更改为所需的格式并生成折线图。

这是我的代码:

local foodir "I:\Games CSVs\" 
local files : dir "`foodir'" files "*.csv"
cd "`foodir'"
local i = 0
foreach file of local files {
    local ++i
    insheet using "`file'", comma clear
    generate ScrapeDate = daily(scrapedate, "YMD")
    format ScrapeDate %tdYY-NN-DD 
    line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) ///
    scale(*.7) ///
    local filename = substr("`file'", 1, strlen("`file'")-4) ///
    title(filename) ///
    ytitle("Price in US$") ///
    legend(size(small)) 
}

有问题的行如下:

local filename = substr("`file'", 1, strlen("`file'")-4)` 
title(filename)

我也尝试过:

generate filename = substr("`file'", 1, strlen("`file'")-4)` 
title(filename)

我遇到以下问题:

  1. 该文件的标题为filename.csv,我希望删除后缀。
  2. 我也无法弄清楚如何将图形保存在磁盘上。

所有图表(我有52张)都在一张一张地闪烁。如果我可以将它们全部保存到一个文件夹(I:\Graphs)中,并且filenamefilename.csv相同,而不是在这里另存为{{1} }或filename.png或任何我可以打开的格式。

我已经阅读了文档。我相信filename.jpeg会替换图形(如果存在的话),并且由于我要遍历目录,因此每次都将替换图形,因为我没有更改图形的名称。

1 个答案:

答案 0 :(得分:2)

在使用前,您需要正确定义本地宏filename。您还需要在saving()命令中使用nodrawline选项:

local foodir "I:\Games CSVs\"
local foosavedir "I:\Graphs\"

local files : dir "`foodir'" files "*.csv"
cd "`foodir'"

local i = 0
foreach file of local files {
    local ++i
    insheet using "`file'", comma clear
    generate ScrapeDate = daily(scrapedate, "YMD")
    format ScrapeDate %tdYY-NN-DD 
    local filename = substr("`file'", 1, strrpos("`file'", ".")-1)
    line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) ///
    saving("`foosavedir'`filename'.gph", replace) nodraw scale(*.7) title("`filename'") /// 
    ytitle("Price in US$") legend(size(small)) 
}

请注意,通过这种方式,文件将以Stata的gph本机格式保存,这始终是最好的做法,因此以后可以根据需要进行编辑。

如果您还希望它们使用不同的图形格式,例如png,则需要在line命令之后导出它们:

graph export "`foosavedir'`filename'.png", name("graph`i'")

在这种情况下,您必须nodraw中指定line选项。

如果指定了选项replace,并且已保存/导出的文件的名称与现有文件冲突,则将替换图形。如果文件名是唯一的,那么您应该不会遇到这个问题。