0

以下是我为可重现的示例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

感谢对我上一个问题的回答,我能够调整我的代码以循环遍历目录"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:\Graphsfilenamefilename.csvfilename.pngfilename.jpeg

我已阅读文档。我相信graph save mygraph如果它存在则替换图形,并且由于我正在遍历目录,因此每次都将替换图形,因为我没有更改图形的名称。

4

1 回答 1

3

您需要在使用本地宏之前正确定义它。filename您还需要在命令中使用saving()andnodraw选项line

本地 foodir "I:\Games CSVs\"
本地 foosavedir "I:\Graphs\"

本地文件:目录 "`foodir'" 文件 "*.csv"
cd "`foodir'"

本地 i = 0
foreach 本地文件的文件 {
    本地++i
    使用 "`file'" 的 insheet,逗号清除
    生成 ScrapeDate = daily(scrapedate, "YMD")
    格式 ScrapeDate %tdYY-NN-DD
    本地文件名 = substr("`file'", 1, strrpos("`file'", ".")-1)
    线平均 thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) ///
    save("`foosavedir'`filename'.gph", replace) nodraw scale(*.7) title("`filename'") ///
    ytitle("美元价格") legend(size(small))
}

请注意,通过这种方式,文件将以 Stata 的gph本机格式保存,这始终是最好的做法,因此您可以稍后在必要时对其进行编辑。

如果您还希望它们采用不同的图形格式,例如png,那么您需要在line命令之后导出它们中的每一个:

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

在这种情况下,您一定没有在 中指定nodraw选项line

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

于 2018-07-30T05:35:16.723 回答