全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8969 29
2012-11-09
悬赏 108 个论坛币 已解决
有大概一万个人的临床检验报告单,是word中的表格形式,如图所示,有几十个word文件,每个word中有这样的表格几百个,
每个表格上面的编号即id号为观测,几个检测指标为变量。
请问高手,像这样形式的数据,能否通过某种方法批量导入sas生成数据集!跪求帮助,如果要一个一个再输到excel中,太麻烦了。

word数据.jpg

最佳答案

davil2000 查看完整内容

/*在下面的代码中增加了WINWORD退出机制*/ /*使用前建议重启一下PC*/ options noxwait noxsync; %macro word2sas(in=, out=); /*%let in=&fname;*/ /*%let out=example1;*/ %let rc=%sysfunc(system(start winword)); data _null_; null= sleep(5); run; filename word DDE 'Winword|System'; data _null_; file word; put '[FileOpen.Name = "' "&in" '"]'; put "[EditSelectAll]"; put "[EditCopy]"; put ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-11-9 10:26:26
Imasasor 发表于 2012-11-9 23:18
上述问题解决了,我用你的方法让它延迟了一会儿。
解决后,又出现错误,提示import时找不到example.xl ...
/*在下面的代码中增加了WINWORD退出机制*/
/*使用前建议重启一下PC*/
options noxwait noxsync;
%macro word2sas(in=, out=);
/*%let in=&fname;*/
/*%let out=example1;*/
%let rc=%sysfunc(system(start winword));
data  _null_;
   null= sleep(5);
run;
filename word DDE 'Winword|System';
data _null_;
file word;
put '[FileOpen.Name = "' "&in" '"]';
put "[EditSelectAll]";
put "[EditCopy]";
put '[FileClose]';
put '[AppMinimize]';
run;
%let rc=%sysfunc(system(start excel));
data  _null_;
   null= sleep(5);
run;
filename excel dde 'excel|system';
data _null_;
file excel;
put '[error(false)]';
put '[paste]';
put '[SAVE.AS("Example.xls")]';
put '[Select.Last.Cell()]';
put '[Copy]';
put '[quit]';
run;
%let rc=%sysfunc(system(taskkill/im winword.exe));
proc import datafile= "Example.xls" out=&out dbms=xls replace;
getnames=no;
mixed=yes;
run;
filename fd "Example.xls";
%let rc=%sysfunc(fdelete(fd));
filename _all_ clear;
%mend word2sas;
/*%word2sas(in=data1.doc, out=example1);*/

%let dirname = D:\Docs;
x "cd &dirname";
filename dirlist pipe "dir /B &dirname\*.doc";
data dirlist ;
     length fname $256;
     infile dirlist length=reclen ;
     input fname $varying256. reclen ;
run;
data _null_;
set dirlist end=last;
if last then call symput('nobs',_n_);
run;
%macro CAL;
%let number=1;
%do %while(&number le &nobs);
  data _null_;
  set dirlist(firstobs=&number obs=&number);
  call symput("fname",trim(fname));
  run;
  %word2sas(in=&fname, out=example1);
  proc datasets library=work nolist;
  append base=all_data data=example1;
  delete example1;
  quit;
%let number=%eval(&number+1);
%end;
%mend ;
%CAL;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-9 10:38:22
你这个很简单
思路是先转成excel,然后倒入sas
按照这个思路,你自己试试
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-9 10:40:01
你这个如果有大批量的要做的话,终极解决办法是开发edc
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-9 10:46:53
luijb 发表于 2012-11-9 10:38
你这个很简单
思路是先转成excel,然后倒入sas
按照这个思路,你自己试试
如何把word转成excel?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-11-9 11:00:41
x "cd d:\docs";
%macro word2sas(in=, out=);
/*%let in=data1.doc;*/
/*%let out=example1;*/
options noxwait noxsync;
%let rc=%sysfunc(system(start winword));
filename word DDE 'Winword|System';
data _null_;
file word;
put '[FileOpen.Name = "' "&in" '"]';
put "[EditSelectAll]";
put "[EditCopy]";
put '[FileClose]';
put '[AppMinimize]';
run;
%let rc=%sysfunc(system(start excel));
filename excel dde 'excel|system';
data _null_;
file excel;
put '[error(false)]';
put '[paste]';
put '[SAVE.AS("Example.xls")]';
put '[Select.Last.Cell()]';
put '[Copy]';
put '[quit]';
run;
proc import datafile= "Example.xls" out=&out dbms=xls replace;
getnames=no;
mixed=yes;
run;
filename fd "Example.xls";
%let rc=%sysfunc(fdelete(fd));
filename _all_ clear;
%mend word2sas;

%word2sas(in=data1.doc, out=example1);

data1.doc
大小:(24 KB)

 马上下载


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群