3

我有一个“宽”的 SAS 数据集,必须每周将其导出到一个新的 Excel 工作簿中。我想每周保留列宽和其他 Excel 属性,但我无法让它工作。这就是我正在尝试的。

  1. 我使用 PROC EXPORT 创建了一个新工作簿(使用sheet="New_TACs")。
  2. 我手动调整了列宽和其他工作表属性(如“过滤器”、列宽、换行、对齐和“冻结窗格”)。
  3. 我删除了所有数据行(将第一行保留为列名)并将其保存为名为“template.xlsx”的新工作簿。
  4. 使用 SAS 系统调用,我将“template.xlsx”复制到“this_week.xlsx”。我再次使用 PROC EXPORT 尝试更新新工作簿,但收到警告。结果包含一个名为“New_TACS1”的工作表。

这是 SAS 日志:

720  proc export data=new_tacs
721     outfile="\\server-path\this_week.xlsx"
722     replace;
723     sheet='New_TACs';
724  run;

WARNING: The target file may contain unmatched range name and sheet name.
WARNING: The target file may contain unmatched range name and sheet name.
WARNING: File _IMEX_.New_TACs.DATA does not exist.
WARNING: Table _IMEX_."New_TACs" has not been dropped.
NOTE: "New_TACs" range/sheet was successfully created.
NOTE: PROCEDURE EXPORT used (Total process time):
      real time           23.88 seconds
      cpu time            1.80 seconds

我不知道该做什么,并希望有任何想法或建议。

4

3 回答 3

1

我认为问题在于,对于零行,SAS 无法正确处理数据。我根本无法让 PROC EXPORT 工作,但只有一个虚拟行,我至少可以让它与libnameand一起工作PROC APPEND。如果过滤器对此负有部分责任,我不会感到惊讶。

在使用 SASHELP.CLASS 列创建空白 excel 文件、添加过滤器、添加一行虚拟数据并保存/关闭后,我这样做:(此处必须使用 SCANTEXT=NO 进行更新访问)

libname newtac "c:\temp\test.xlsx" scantext=no getnames=yes;

proc append base=newtac.'New_TACs$_xlnm#_FilterDatabase'n data=sashelp.class force;
run;

libname newtac clear;

至少,这很接近。由于某种原因,我得到了一些空白行,可能是由于我在查看此内容时所做的其他事情。

您最好的解决方案可能是等待 9.4 TS1M0 和ODS EXCEL,这将让您直接从 SAS 做所有这些事情;或使用 DDE。

于 2013-11-08T17:46:22.540 回答
1

我建议查看 SaviCells。 http://www.sascommunity.org/wiki/SaviCells。它提供了更好的 SAS to Excel 功能,包括创建一个包含所有 Excel 格式的模板并将其与新数据一起使用。

于 2013-11-08T21:06:11.980 回答
0

在 SAS 中使用 DDE 来实现这一点。

您可以按照您希望的方式创建您的 excel 模板。使用 DDE,您将:

  1. 打开 Excel
  2. 打开要用作模板的 excel 文件
  3. 用更新的数据填充它
  4. 将文件另存为新文件名

这是一种过时的技术,但它可以完成工作。

谷歌搜索 SAS 和 DDE 会发现大量代码示例和教程。

于 2013-11-09T17:30:30.893 回答