在sas中编写vba代码

我想将我的VBA代码实现到我的SAS代码中,所以我可以一次完成整个过程。 我的SAS代码读取一个大的SAS表,做一些转换,最后导出到一个Excel文件(代码如下)。 我也在Excel文件中写了一些VBA代码(例如一些variables的AutoFiltering,你可以看到下面的代码)。

表格看起来像这样:

ABC Var1 Var2 Var3 -------------------- 1 1 1 10 15 20 1 1 2 15 20 30 1 2 1 20 30 40 1 2 2 30 40 50 2 1 1 40 50 60 2 1 2 50 60 70 2 2 1 60 70 80 .............. .............. 

但是, 我想将我的VBA代码实现到我的SAS代码中,所以我可以一次完成整个过程。 我知道如何打开和运行SAS中的Excel文件(代码如下),但我不知道如何在SAS中实现VBA代码。

如果你想知道为什么要在我的SAS中实现我的macros代码,我将来会多次使用类似的SAS表,所以将整个代码保存在一个地方会更加实际。

我只是意识到,我不能导出一个在macros启用Excel格式,XLSM SAS表。 我想这也是一个挑战。 而且,从Excel文件中保存macros代码的操作并不那么实际,因为它必须保存在“添加”菜单中。 所以在一个地方处理整个过程会好很多,就像在SAS编辑器里面一样。

SAS将最终表格导出到Excel文件的代码:

 PROC EXPORT DATA=File1 OUTFILE= "&server\&env\test1.xlsx" DBMS=EXCEL REPLACE; SHEET="sheet1"; RUN; 

Excel文件中的VBA代码示例为Excel文件中的variables创buildAutoFilter:

 Sub Macro1() Dim N As Long, r As Range With Sheets("sheet1") N = .Cells(Rows.Count, "B").End(xlUp).Row ReDim ary(1 To N) For i = 1 To N ary(i) = .Cells(i, 1) Next i End With Range("A1:F20").AutoFilter ActiveSheet.Range("$A$1:$F$20").AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues End Sub 

SAS中的代码用于启动和运行SAS中的Excel文件:

 OPTIONS NOXWAIT NOXSYNC; DATA _NULL_; RC=SYSTEM('START EXCEL'); RC=SLEEP(0.5); RUN; FILENAME CMDS DDE 'EXCEL|SYSTEM'; DATA _NULL_; FILE CMDS; PUT "[OPEN(""&server\&env\test1.XLS"")]"; PUT '[RUN("Macro1")]'; PUT '[SAVE.AS("&server\&env\FORMATTED_FILE.XLSM")'; PUT "[QUIT()]"; RUN; QUIT; 

通常的做法是使用模板文件。 你有你的模板保存,其中有保存在其中的macros(也许也有一些格式化,使用DDE,你不必从空白的工作表开始)。

您可以使用DDE填充模板工作簿/工作表,然后“另存为”另一个文件,也可以使用DDE创build新的工作簿和工作表,打开模板工作簿,运行macros,closures模板。 你所做的可能取决于你是否想要将结果分发给macros。

这允许你以任何方式运行所有的东西而不用与它交互 – 因为模板macros已经存在,所以你不必为它添加新的macros。 一切都可以用这种方式完成。

例如,本文将逐步介绍如何使用SAS®DDE创build基于来自SAS数据集的N次观察结果的Excel图表 ,以及其他一些关于此主题的论文。

使用DDE,您可以将filter设置为SAS:

 data _null_; FILE CMDS; /* select your worksheet */ put '[workbook.select("your_sheet")]'; /* select the column range you want to set the filter */ put '[select("r1c2:r1c5")]'; /* set filter */ put '[filter]'; run;