【Stata 】数据批量季节调整教程
⼀、关于季节调整:之前是⼀直在⽤ Eviews 做 X-12 的季节调整,但是调整选项和 的相⽐确实有点少了,影响精度。
另外,做 BigData 的模型动则 ⼏千个 个体不可能⼀个个在 Eviews ⾥⼿动调整,有⼈提到过⽤ Eviews 批量执⾏,但是控制选项⼜很困难(我也没试过,命令⾏能不能跑起来也是个问题),总的来说⽤ Stata 季节调整是最优的。
⼆、问题:
⽤ Stata 最⼤的问题就是不好批量做季节调整,于是踩了⼀些坑,思考了⼀套最快的批量调整⽅案,附代码。
1. 在调整前你需要具备 Stata 季节调整程序,可以在 下。没有⼈⼤经济论坛的可以进⽹盘下全套程序:,提取码: 2vjy
2. 下完之后只需要把 x12a ⽂件夹⾥的 放到你的 Stata 的 plus ⽬录就可以,下⾯介绍如何 plus ⽬录:(1)在 Stata ⾥执⾏ sysdir ,就会显⽰你的 PLUS ⽬录
(2)直接把 放到 plus ⽬录下即可
3. 安装季节调整包,命令:三、解决⽅案
注:假如你只需要调整⼏个变量,不需要查看本教程,直接输⼊命令 db sax12 调整即可,可以参考 这套不错的设定⽅案。
1. 先把⼤量数据导进 Stata ,我们这⾥假设的是 多变量 、 ⾯板数据 ,注意变量名字统⼀⽤英⽂,中⽂ 不识别,建议使⽤var01 或者 var1 这种形式的命名,为后续操作提供便利。
2. ⽣成时间序列,确定时间区间。在 Stata 执⾏以下代码:
这段代码的作⽤是先⽣成时间数据,之后设定,下⾯介绍修改项:
(1)其中 tm() 函数要根据你的时间形式来选取,如果是 2009m1 也就是只有到⽉度的数据(最常⽤的),使⽤ tm() 函数即可,如果是精确到 ⽇ ,请⾃⾏百度到相应函数替换,有关函数可参考 。手机c语言编译器怎么运行
(2)其中 tm() 函数内是数据的起始时间,这⾥是假定为了 2009m1 开始,可以⾃⾏替换⾃⼰的起始时间,注意 tsset 之后根据显⽰的确认⼀下你的时间区间是否正确。
3. Python 批量拼接⽣成执⾏代码,拼接完成的 Stata 执⾏季节调整命令举例:
注:这套调整⽅案是参考 Lee_iris 的,如果想⾃⼰设定调整⽅案,先⽤ db sax12 界⾯化执⾏⼀次你的⽅案,再把⾃动执⾏的代码拷贝过来即可作为⽅案。
Python 拼接⽅案代码:
findit sax12 net install st0255.pkg
1
2 gen t =tm (2009m1)+_n -1 tsset t , monthly
1
2sax12 var01, satype (single ) inpref (z1.spc ) outpref (z1) transfunc (none ) regpre ( const td ) ammaxlag (2 1) ammaxdiff (2 1) ammaxlead (12) x11mode 1
注:这⾥变量名假设成了 z01、z09 这种,所以要⼿动在前⼗个补 0,你也可以设定成不带 0 前缀的。当然你⽤ var01 、var1 这种类型也可以,不过后⾯清扫⽂件的时候要⼩⼼。(1)有三个需要拼接的地⽅,第⼀个是上⾯ Stata 例⼦语句⾥变量 var01 部分,也是你 Stata ⾥给变量设定的名字,第⼆个是 .spc ⽂件,我们这⾥⽤ Python 拼接的时候,假定为了 z+序号 形式的,为了给后续操作提供
便利,建议使⽤相同格式,第三个是输出前缀,这⾥同样使⽤ z+序号 的前缀格式。(2)注意要修改 n 为你的⾯板个体数。(假定有 34 个省,那就是 35)如果你不熟悉 Python ,可以参考格式⾃⾏⽤熟悉的语⾔拼接⽣成。另外如果你只有 ⼏⼗个个体 ,⽹盘⽂件⾥还提供了⽣成好的 ⼏⼗个命令⾏,⽆需进⾏这⼀步。
4. 将批量⽣成的代码在 Stata ⾥跑完,执⾏过程会不断有 控制台 窗⼝弹出,不要点击,否则会导致暂停。另外,还会⾃动打开 季节调
整报告 ,⽆需理会,最后⼀并关掉即可。注:如果报错,说明你的 季节调整程序 即 没有放对位置,或者 sax12 库没有安装,亦或是 空格出错 ,单词中断了,⾃⾏检查,可以先跑⼀条试试看。
5. 跑完之后打开你的 Stata 安装根⽬录,下⾯会有⼀⼤堆 z+序号 格式的⽂件,全部复制备份起来,如果你想了解每⼀个⽂件的内容并做 X-12 季节调整 分析和预测,请打开以 .out 为结尾的⽂件查看 季节调整报告。
之后⽤以下代码执⾏这些⽂件的汇总和清扫⼯作,⼀劳永逸:text = 'sax12 var'text1 = ', satype(single) inpref(z'text2 = '.spc) outpref(z'text3 = ') transfunc (none ) \ regpre ( const td ) ammaxlag (2 1) ammaxdiff (2 1) ammaxlead (12) x11mode (add ) x11seas (x11default )'stata = ''for i
in range (1,n ): stata += text if i <=9: stata += '0' + str (i ) else : stata += str (i ) stata += text1 + str (i ) + text2 + str (i ) + text3 + '\n\n'with open ('', 'w') as f : f .write (stata )
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19绝世剑神无用一书生免费阅读
20
21
22
23
24
注:需要修改的只有 n 和 t ,按⾃⼰情况来。
6. 执⾏完毕之后,⾃动清扫了冗余的 z+序号 ⽂件,同时⽣成了·SeasonalAdjustmentDataExtraction.csv 汇总表格,点开即为 季节调整 后的 ⾯板数据 结果,横向为时间期数,纵向为按 var01 即 Stata 命名顺序排列的个体。注:清扫的时候是把所有 z 开头的⽂件都清扫了,如果要⾃定义清扫,可以⼿动删除或者写别的规则,之所以⽤ z 开头的变量是因为Stata 根⽬录没有带 z 字母的⽂件。
后记虽然流程有点⼩复杂,但是都有相应的机械化⽅案,还是⽐较快的,Eviews 即使有最新的 X-13 解决⽅案, ⾃动化 还是问题,另外没有国内相适配的假期设定。# t 为时间期数t = 11 * 12data = {}for i in range (1,n ): data [str (i )] = [] with open ('z' + str (i ) + '.d11', 'r') as f : lines = f .readlines () for line in lines : lineList = line .strip ().split ('\t') if lineList [0] != 'date' and lineList [0] != '------': data [str (i )].append (lineList [1])with open ('SeasonalAdjustmentDataExtraction.csv', 'w') as f : for i in range (t ): lineData = '' for j in range (1,n ): lineData += data [str (j )][i ] + ',' lineData = lineData [:-1] lineData += '\n' f .write (lineData )# 清扫file_dir = r './'files = os .listdir (file_dir )for i in range (len (files )): if files [i ].find ('z') != -1: os .remove (files [i ])for i in range (1,n ): fileName = 'var' if i <=9: fileName += '0' + str (i ) else : fileName += str (i ) fileName += '.dat' os .remove (fileName )
c try catch语句5
6
7
8
9
10
11
12
13
14
15
16
17
18
python入门教程网盘19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
vue中页面跳转41
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论