0

我想遍历多个csv文件,以更改日期变量的格式并生成图表,每个图表的标题都是相应文件的名称。

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格式的。我确保所有文件中的变量名都是相同的。

我想获取每个文件,将其scrapedate从字符串转换为日期格式。然后,我想在 y 轴上绘制由四个变量averagethpercentile、和 表示的四条线v5,。v6ScrapeDate

到目前为止,基于谷歌搜索,我尝试了以下代码:

local files : dir "I:\Games CSVs" files "*.csv"

cd "I:\Games CSVs"

foreach file in `files' {
    insheet using `file', comma clear

    /* Convert string to date format */
    gen ScrapeDate = date(scrapedate, "YMD") 
    format ScrapeDate %td #Convert string to date format

    /* X Axis: price, Y Axis: ScrapeDate; Plotting, averages, 25th, 50th and 75th percentile  */
    line average thpercentile v5 v6 ScrapeDate, legend(size(medsmall))  
}

上面的代码包含在一个do文件中。问题是,当我这样做时File -> Do.. -> filename.do,我看不到任何图表,它只是在我的窗口中显示为end of do file。我没有看到图表!

我希望我的代码没有错误或任何错误,因为在左侧面板上,do "path/filename.do"显示为红色。我已经删除了文件中的所有空白行do,它没有分号,这与 Google 搜索答案的内容相反(答案有分号)。

我希望能够访问图表!但是它们存储在哪里?

我能够使用以下代码仅使用一个文件在一定程度上完成我想要的事情:

insheet using "I:\Games CSVs\oneofthecsvfiles.csv"
gen ScrapeDate = date(scrapedate, "YMD")
format ScrapeDate %td
line average thpercentile v5 v6 ScrapeDate, legend(size(medsmall))

最后,上面的代码将 date 变量转换为数字,但将格式从2015-12-17最初更改为17dec2015.

有没有办法让它成为2015/12/172015-12-17

4

1 回答 1

2

假设您有以下玩具数据集:

local foodir // 在此处插入您的目录路径

清除
输入 str32 eventname str10 scrapedate float(average thpercentile v5 v6)
“事件名称”“2015-12-15”136.9255 83.2 104.875 148.75
“事件名称”“2015-12-16”130.4555 78.55 99 138.22
“事件名称”“2015-12-17”123.66705 72.7 90.25 131.2
“事件名称”“2015-12-18”116.45757 64.855 78.55 119.5
“事件名称”“2015-12-19”108.63446 60.56333 72.7 119.07333
“事件名称”“2015-12-20”94.97125 55.15 69.77 112.48
结尾

导出使用“`foodir'one”分隔,替换

清除
输入 str32 eventname str10 scrapedate float(average thpercentile v5 v6)
“事件名称”“2014-12-15”236.9255 83.2 104.875 148.75
“事件名称”“2014-12-16”230.4555 78.55 99 138.22
“事件名称”“2014-12-17”223.66705 72.7 90.25 131.2
“事件名称”“2014-12-18”216.45757 64.855 78.55 119.5
“事件名称”“2014-12-19”208.63446 60.56333 72.7 119.07333
“事件名称”“2014-12-20”194.97125 55.15 69.77 112.48
结尾

导出使用“`foodir'two”分隔,替换

清除
输入 str32 eventname str10 scrapedate float(average thpercentile v5 v6)
“事件名称”“2013-12-15”336.9255 83.2 104.875 148.75
“事件名称”“2013-12-16”330.4555 78.55 99 138.22
“事件名称”“2013-12-17”323.66705 72.7 90.25 131.2
“事件名称”“2013-12-18”316.45757 64.855 78.55 119.5
“事件名称”“2013-12-19”308.63446 60.56333 72.7 119.07333
“事件名称”“2013-12-20”294.97125 55.15 69.77 112.48
结尾

以下对我有用:

local foodir // 在此处插入您的目录路径

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

本地 i = 0
foreach 本地文件的文件 {
    本地++i
    使用 "`file'" 的 insheet,逗号清除

    生成 ScrapeDate = daily (scrapedate, "YMD")
    格式 ScrapeDate %tdCCYY-NN-DD

    line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) title("`file'") ///
    图例(尺寸(中小))      
}

只需在本地宏中插入完整路径,foodirStata 将完成剩下的工作。

我在您的原始代码中所做的所有更改都以粗体表示。

于 2018-07-18T12:20:18.120 回答