本文介绍了用于更改数据格式和生成图形的循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想循环访问多个csv文件,以便更改日期变量的格式并生成图形,每个图形的标题就是相应文件的名称。

以下是使用dataex创建的csv文件之一的示例:

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从字符串转换为日期格式。然后,我想绘制由四个变量averagethpercentilev5v6表示的四条线,并在y轴上绘制ScrapeDate

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

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 CSVsoneofthecsvfiles.csv"
gen ScrapeDate = date(scrapedate, "YMD")
format ScrapeDate %td
line average thpercentile v5 v6 ScrapeDate, legend(size(medsmall))

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

有没有办法将其设置为2015/12/172015-12-17

推荐答案

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

local foodir // INSERT YOUR DIRECTORY PATH HERE

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

export delimited using "`foodir'one", replace

clear
input str32 eventname str10 scrapedate float(average thpercentile v5 v6)
"EventName" "2014-12-15"  236.9255     83.2 104.875    148.75
"EventName" "2014-12-16"  230.4555    78.55      99    138.22
"EventName" "2014-12-17" 223.66705     72.7   90.25     131.2
"EventName" "2014-12-18" 216.45757   64.855   78.55     119.5
"EventName" "2014-12-19" 208.63446 60.56333    72.7 119.07333
"EventName" "2014-12-20"  194.97125    55.15   69.77    112.48
end

export delimited using "`foodir'two", replace

clear
input str32 eventname str10 scrapedate float(average thpercentile v5 v6)
"EventName" "2013-12-15"  336.9255     83.2 104.875    148.75
"EventName" "2013-12-16"  330.4555    78.55      99    138.22
"EventName" "2013-12-17" 323.66705     72.7   90.25     131.2
"EventName" "2013-12-18" 316.45757   64.855   78.55     119.5
"EventName" "2013-12-19" 308.63446 60.56333    72.7 119.07333
"EventName" "2013-12-20"  294.97125    55.15   69.77    112.48
end

以下内容适用于我:

local foodir // INSERT YOUR DIRECTORY PATH HERE

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 %tdCCYY-NN-DD

    line average thpercentile v5 v6 ScrapeDate, name("graph`i'", replace) title("`file'") ///
    legend(size(medsmall))      
}

只需在本地宏foodir中插入完整路径,Stata将完成其余工作。

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

这篇关于用于更改数据格式和生成图形的循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 01:42