読者です 読者をやめる 読者になる 読者になる

DDE を使って Excel シートの指定範囲を初期化する SAS マクロ

SAS
%macro DELSHEET(rc);
%local vlen nlen k var;
data _null_;
  rc = "&rc.";
  s = find(rc, "R"); e = find(rc, "C");
  r1 = substr(rc, s+1, e-s-1);
  s = e; e = find(rc, ":");
  c1 = substr(rc, s+1, e-s-1);
  rc = substr(rc, e+1, length(rc)-e);
  s = find(rc, "R"); e = find(rc, "C");
  r2 = substr(rc, s+1, e-s-1);
  c2 = substr(rc, e+1, length(rc)-e);
  call symput("vlen", c2-c1+1);
  call symput("nlen", r2-r1+1);
run;
%do k = 1 %to &vlen.;
  %let var = &var. y 1. x 1.;
%end;
data dummy;
do i = 1 to &nlen.; output; end;
filename ddeout dde "excel|[&filename.]&sheetname.!&rc.";
data _null_;
  set dummy; file ddeout notab;
  x = '09'x; y = '00'x; put &var.;
run;
%mend DELSHEET;
%let filename  = Book1.xlsx;
%let sheetname = Table 1;
%DELSHEET(R1C1:R50C10);

あると使うかなぁと思って作ってみました。

  1. 矩形領域しか初期化できません。
  2. RC形式しか対応してません、始点と終点を省略しないで書かないと関係ない所が消えるかも。
  3. エラー処理とかなんもしてないので気をつけて使おう。