代码之家  ›  专栏  ›  技术社区  ›  ababuji

循环浏览文件夹以生成和保存每个文件的图形

  •  0
  • ababuji  · 技术社区  · 6 年前

    下面是我的 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\" 每本书都读 猪瘟病毒 文件使用:

    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 ) filename 丝状病毒 而这里被另存为 filename.png filename.jpeg 或者任何我能打开的格式。

    我已经阅读了文件。我相信 graph save mygraph 如果图存在,则替换它,并且由于我在目录中循环,每次都将替换该图,因为我不更改该图的名称。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Pearly Spencer Paul Cruz    6 年前

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

    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 ,然后需要在 线 命令:

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

    在这种情况下,你必须 已指定 NODRAW 选择权 线 .

    如果选择 replace 已指定,并且已保存/导出文件的名称与现有文件冲突。如果文件名是唯一的,就不应该有这个问题。