在 excel 中调用 TramoSeats 进行季节调整-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 软件培训>>

AMOS软件培训

>>

在 excel 中调用 TramoSeats 进行季节调整

在 excel 中调用 TramoSeats 进行季节调整

发布:xchec | 分类:AMOS软件培训

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

将Tramo/Seats季节调整作为excel中的一个函数使用,不知为什么没法传附件,就直接把源代码贴上来吧(VBA),自己将它另存为excel的xla加载宏使用,很方便的。主要是使用TS的自动处理过程,可以选择输出季调后序列,或 ...
坛友互助群


扫码加入各岗位、行业、专业交流群



将 Tramo/Seats 季节调整作为 excel 中的一个函数使用,不知为什么没法传附件,就直接把源代码贴上来吧(VBA),自己将它另存为 excel 的 xla 加载宏使用,很方便的。

主要是使用 TS 的自动处理过程,可以选择输出季调后序列,或季节因素,或两者,可以选择是否包含预测。

调用方法:

ts(x As Range, Optional start_year As Integer = 2000, Optional start_period As Integer = 1, Optional freq As Integer = 12, Optional out_serie As Integer = 1, Optional forecast As Boolean = False)

实在是太缺钱了,象征性的收点,见谅。使用中若有问题,请在此回复。

Private Declare Function WaitForSingleObject Lib "kernel32" _ (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Const INFINITE = -1& Private Const SYNCHRONIZE = &H100000

Option Explicit

Function ts(x As Range, Optional start_year As Integer = 2000, Optional start_period As Integer = 1, Optional freq As Integer = 12, Optional out_serie As Integer = 1, Optional forecast As Boolean = False) 'A simple excel interface to TRAMO/SEATS ' ' 'Use the full automatic procedure, RSA=3, but force the log transformation ' ' 'Copyright Jun 2005 ' 'by Xia Chun

Dim iTask As Long, ret As Long, pHandle As Long Dim fs, fd Dim cell As Range Dim CurrentDrive As String, CurrentPath As String Dim Line As String Dim ss() As String Dim l As Integer, i As Integer Dim rows As Integer, cols As Integer Dim ts_out() As Double Const PathToTramo As String = "c:\tramo" Const PathToOutFile As String = "c:\seats\output\table-s.out" Set fs = CreateObject("Scripting.FileSystemObject") ' Generate the input file Set fd = fs.CreateTextFile(PathToTramo & "\serie", True) l = x.Count fd.writeline ("tmpserie") fd.writeline (l & " " & start_year & " " & start_period & " " & freq) For Each cell In x If IsNumeric(cell) And cell > 0 Then fd.writeline (cell) Else fd.writeline ("-99999") Next cell fd.writeline ("$INPUT RSA=3,LAM=0$") fd.Close Set fd = Nothing CurrentPath = CurDir() CurrentDrive = Left(CurrentPath, 2) ChDrive (Left(PathToTramo, 2)) ChDir (PathToTramo) 'Call ts.exe to do seasonal adjustment iTask = Shell(PathToTramo & "\ts.exe", vbHide) pHandle = OpenProcess(SYNCHRONIZE, False, iTask) ret = WaitForSingleObject(pHandle, INFINITE) ret = CloseHandle(pHandle) ChDrive (CurrentDrive) ChDir (CurrentPath) 'Read the output file Set fd = fs.opentextfile(PathToOutFile, 1) fd.skipline fd.skipline If forecast Then rows = l + 2 * freq Else rows = l If out_serie > 2 Then cols = 2 Else cols = 1 ReDim ts_out(1 To rows, 1 To cols) i = 1 Do While Not fd.atendofstream And i <= rows Line = fd.readline() ss = Split(slim(Line)) Select Case out_serie Case 1 ts_out(i, 1) = ss(3) Case 2 ts_out(i, 1) = ss(4) Case 3 ts_out(i, 1) = ss(3) ts_out(i, 2) = ss(4) Case Else End Select i = i + 1 Loop fd.Close Set fd = Nothing Set fs = Nothing ts = ts_out End Function

Function slim(s As String, Optional d As String = " ") As String 'slip the consecutive delimiter d in string s and trim the left and right delimiters ' 'Copyright June, 2005 by Xia Chun

Dim l As Integer Dim i As Integer

slim = "" l = Len(s) i = 1

'Trim the left delimiters first Do While i <= l And Mid(s, i, 1) = d i = i + 1 Loop

Do While i <= l ' if a delimiter found, skip it until next non-delimiter character, or we simply link the ' character to output and move the pointer next If Mid(s, i, 1) = d Then Do i = i + 1 Loop Until i > l Or Mid(s, i, 1) <> d If i <= l Then slim = slim & d ' if we don't reach the end of string, add a single delimiter to output Else slim = slim & Mid(s, i, 1) i = i + 1 End If Loop

End Function

扫码或添加微信号:坛友素质互助


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-28523-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。