Macros 如何获取Sas数据集标题以通过DDE导出到excel工作表

Macros 如何获取Sas数据集标题以通过DDE导出到excel工作表,macros,sas,sas-macro,dde,Macros,Sas,Sas Macro,Dde,因此,我试图编写一个宏,将我的sas数据集导出到现有的excel工作表中。我正在使用我从SUGI的一篇论文中找到的以下代码。问题是,下面的代码成功地完成了这项工作,但它无法将标题(变量名)复制粘贴到excel中,而只是粘贴所有观察结果。如何让我的代码也将标题(变量名)粘贴到excel %MACRO EXCELOUT(SDS=,XLSSHT=,XLSF=, ROW=,COL= ) ; PROC CONTENTS DATA=&SDS NOPRINT OUT=CNT ; RUN; PROC

因此,我试图编写一个宏,将我的sas数据集导出到现有的excel工作表中。我正在使用我从SUGI的一篇论文中找到的以下代码。问题是,下面的代码成功地完成了这项工作,但它无法将标题(变量名)复制粘贴到excel中,而只是粘贴所有观察结果。如何让我的代码也将标题(变量名)粘贴到excel

%MACRO EXCELOUT(SDS=,XLSSHT=,XLSF=, ROW=,COL= ) ;

PROC CONTENTS DATA=&SDS NOPRINT OUT=CNT ;
RUN;
PROC SORT DATA=CNT ;
BY VARNUM ;
RUN;

PROC SQL NOPRINT;
SELECT NAME
INTO: VARS SEPARATED BY ' '
FROM CNT ;
SELECT COUNT(DISTINCT NAME)
INTO: COLS SEPARATED BY ' '
FROM CNT ;
SELECT NOBS
INTO: ROWS
FROM CNT
WHERE VARNUM = 1;
QUIT;

OPTIONS NOXWAIT NOXSYNC ;
X "&XLSF" ;

DATA _NULL_ ;
X=SLEEP(5);
RUN ;

FILENAME TEMP DDE "EXCEL|&XLSSHT.!R&ROW.C&COL.:R%TRIM(%EVAL(&ROWS+&ROW1))C%TRIM(%EVAL(&COLS+&COL)" ;

DATA _NULL_ ;
SET &SDS ;
FILE TEMP ;
PUT &VARS ;
RUN ;

FILENAME CMDS DDE 'EXCEL|SYSTEM' ;
DATA _NULL_ ;
FILE CMDS ;
PUT '[SAVE()]' ;
PUT '[QUIT()]' ;
RUN ;

%MEND EXCELOUT ;

只需在写入数据的步骤中添加一点逻辑,让它也写入名称

data _null_ ;
  file temp ;
  if _n_=1 then do;
    do _n_=1 to &cols ;
      set cnt(keep=name rename=(name=__name__)) ;
      put __name__ @;
    end;
    put;
  end;
  set &sds ;
  put &vars ;
run ;
获取变量名并计算行和列的代码也可能更简单

proc sql noprint;
 select nobs
      , name
   into :rows trimmed
      , :vars separated by ' '
   from cnt
 ;
 %let cols = &sqlobs ;
quit;
您的FILENAME语句不需要%TRIM(),并且缺少为标题添加一行所需的
+
。使其看起来像是引用了
&row1
而不是
&row

filename temp dde "excel|&xlssht.!r&row.c&col.:r%eval(&rows+&row+1)c%eval(&cols+&col)" ;