【问题标题】:macro on proc export.proc 导出上的宏。
【发布时间】:2015-01-21 15:45:49
【问题描述】:

您好,我正在 proc 内容之后创建一个宏 proc 导出,代码在这里。

%macro cont(dataset_sheet, library );


proc contents data= &library .&dataset_sheet    out=&dataset_sheet 
;   run;

proc export data= &library . &dataset_sheet  outfile="C:\mapp.xls" 
dbms=excelcs replace; sheet="&dataset_sheet";run;
%mend;

%cont(dataset, my_lib);

它适用于 proc 内容,但是当我同时运行它们时,它说 proc 导出语句中没有那种库......这里有什么问题?

【问题讨论】:

  • 上面的多余空格是在你的代码中还是通过复制/粘贴引入的?
  • 它们来自复制粘贴。在 &library.&dataset 它没有使用 '.'所以我在 &library 之后给了一个空格,它为 proc 内容运行。但它不是为导出做的。
  • 无法识别 proc export 语句中的数据集。它说 work.my_lib.data 不存在。其中,my_lib 必须是一个库,而 dataset 应该是数据集。

标签: macros sas


【解决方案1】:

您的问题可能源于. 是宏变量终止符这一事实。它通常是可选的,但如果存在,则使用它;因此,如果下一个字符实际上应该是.,它应该加倍。

因此,&library.&dataset. 其中&library = WORK&dataset = TEST 表示您要求的是WORKTEST,而不是WORK.TEST。您需要第二个句号:&library..&dataset 在这种情况下。

【讨论】:

  • 我试过 Joe,它说 ERROR: File work.dataset.DATA 不存在。
  • 那么你可能没有正确定义&dataset
【解决方案2】:

删除库名称后多余的空格并包含另一个“。”

%macro cont(dataset_sheet, library );


proc contents data= &library..&dataset_sheet    out=&dataset_sheet 
;   run;

proc export data= &library..&dataset_sheet  outfile="C:\mapp.xls" 
dbms=excelcs replace; sheet="&dataset_sheet";run;
%mend;

%cont(dataset, my_lib);

【讨论】:

  • 它实际上直接工作......我删除了空格并运行它。不需要任何双句点
  • 你当然需要双句点 - 没有它它不应该工作,除非你将“&library”完全留空(默认使用WORK)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多