SAS в Excel DDE производит тест, но не выводит данные - PullRequest
0 голосов
/ 31 октября 2018

Я следил за документацией в Интернете и просматривал другие запросы на переполнение стека, но пока не смог найти способ вывести свой набор данных SAS, чтобы преуспеть через DDE.

Я использую SAS-версию SAS9.4. Я использую версию excel для Microsoft Office 2016 - Excel 2016

Код, который я использую для экспорта,

/*Excel DDE interface options*/ /*TEST*/
options noxwait noxsync;

X '"C:\Users\user.name\Desktop\template_dde.xlsx"';

data _null_;
    rc=sleep(15);
run;

filename ddedata dde 'excel|SFA!r2c1:r4000c56';

data _null_;
    file ddedata notab;
    set work.Results_output_format end=eof;
put '"THIS IS A TEST"';
run;

%LET timestamp = %SYSFUNC(PUTN(%SYSFUNC(DATE()),yymmddn8.));
%LET hourstamp = %SYSFUNC(COMPRESS(%SYSFUNC(TIME(),time.),%STR( :)));

data _null_;
    length cmnd $150.;
    file ddedata;

    cmnd = '"[save.as("C:\Users\user.name\Desktop\&timestamp._&hourstamp._template_dde.xlsx")]"';
    put cmnd;
    put '[quit()]';
run;

Он выводит «это тест», а затем выводит оператор сохранения, но мои данные не экспортируются и файл фактически не сохраняется.

Я что-то пропускаю?

1 Ответ

0 голосов
/ 31 октября 2018

SET не не неявно помещает содержимое набора данных в файл Excel. Вам нужно использовать оператор PUT для добавления данных на лист. Вам также необходимо использовать отдельное имя файла для отправки команд на канал Excel|system.

Ваш код содержал одинарные кавычки вокруг попытки разрешения макропеременной - это было неправильно.

Этот код предполагает наличие существующей рабочей книги c:\temp\template_dde.xlsx

* open template in Excel;
X '"C:\Temp\template_dde.xlsx"';

* wait for app to start and file to load;
data _null_; rc=sleep(3); run;

* define filerefs for data transfer and command execution;
filename ddedata dde 'excel|Sheet1!r2c1:r4000c56';
filename ddecmnd dde 'excel|System';

* pump data into excel cells at location specified in ddedata;
data _null_;
  file ddedata ; * <--- removed your NOTAB option, so now I dont have to put '09x' between each variable;

  set sashelp.class;
  put name sex age height weight; 
run;

* Extended ISO timestamp as yyyy-mm-dd_hh-mm-ss;
%let timestamp = %sysfunc(translate(%sysfunc(datetime(),E8601DT),%str(_-),%str(T:)));

* send commands to save workbook and close Excel;
data _null_;
    file ddecmnd;

    put "[save.as(""C:\Temp\&timestamp._template_dde.xlsx"")]";
    put '[quit()]';
run;

Множество документов для конференций по DDE, таких как "Разработка приложений SAS®-с-Excel: Инструменты и методы" , SUGI 31, Лерой Бесслер, Assurant Health

...