楼主: Imasasor
9113 29

word中的规则数据表格可否导入sas? [推广有奖]

11
zkymath 在职认证  发表于 2012-11-9 13:26:42
scarfacetony 发表于 2012-11-9 13:10
WORD 另存为TXT可行不?
多表格或者文表混排转换成TXT肯定不合适,我看实在不行就外包给数据录入公司好了,比什么都省心!返回后,抽检一下数据质量就搞定了

12
davil2000 发表于 2012-11-9 19:12:38

options noxwait noxsync;
%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;
                %put _user_;
                %word2sas(in=&fname, out=example1);

                proc datasets library=work nolist;
                append base=all_data data=example1;
                delete example1;
                quit;

%let number=%eval(&number+1);
%let dsname=%scan(&syspbuff,&number,( , ) );
%end;
%mend ;

%CAL;
R是万能的,SAS是不可战胜的!

13
davil2000 发表于 2012-11-9 19:16:10
For a test, you can add some .doc files such as data2.doc, data3.doc and etc. in the directory of  "D:\Docs".
however,  these files should have similar structure.
R是万能的,SAS是不可战胜的!

14
Imasasor 发表于 2012-11-9 21:29:47
davil2000 发表于 2012-11-9 19:16
For a test, you can add some .doc files such as data2.doc, data3.doc and etc. in the directory of  " ...
哥,我高中毕业,不懂洋文! 不过还是十分感谢,我试一下,不懂再问你。
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

15
davil2000 发表于 2012-11-9 22:19:20
Imasasor 发表于 2012-11-9 21:29
哥,我高中毕业,不懂洋文! 不过还是十分感谢,我试一下,不懂再问你。
WORD启动及退出的迟滞可能会产生错误。
可以在程序
%let rc=%sysfunc(system(start winword));
之后
加上这样一段
data _null_;
null= sleep(3);
run;
有问题在说吧
R是万能的,SAS是不可战胜的!

16
Imasasor 发表于 2012-11-9 22:44:20
davil2000 发表于 2012-11-9 11:00
x "cd d:\docs";
%macro word2sas(in=, out=);
/*%let in=data1.doc;*/
198  x "cd d:\docs"
198!               ;
199  %macro word2sas(in=, out=);
200  /*%let in=data1.doc;*/
201  /*%let out=example1;*/
202  options noxwait noxsync;
203  %let rc=%sysfunc(system(start winword));
204  data _null_;
205  null= sleep(3);
206  run;
207
208  filename word DDE 'Winword|System';
209  data _null_;
210  file word;
211  put '[FileOpen.Name = "' "&in" '"]';
212  put "[EditSelectAll]";
213  put "[EditCopy]";
214  put '[FileClose]';
215  put '[AppMinimize]';
216  run;
217  %let rc=%sysfunc(system(start excel));
218  filename excel dde 'winexcel|system';
219  data _null_;
220  file excel;
221  put '[error(false)]';
222  put '[paste]';
223  put '[SAVE.AS("Example.xls")]';
224  put '[Select.Last.Cell()]';
225  put '[Copy]';
226  put '[quit]';
227  run;
228  proc import datafile= "Example.xls" out=&out dbms=excel replace;
229  getnames=no;
230  mixed=yes;
231  run;
232  filename fd "Example.xls";
233  %let rc=%sysfunc(fdelete(fd));
234  filename _all_ clear;
235  %mend word2sas;
236
237  %word2sas(in=data1.doc, out=example1);

NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         3.01 秒
      CPU 时间         0.06 秒



NOTE: File WORD 是:
      DDE 会话,
      SESSION=Winword|System,RECFM=V,LRECL=256

NOTE: 有 5 条记录写入到 File WORD 中。
       最小记录长度是 10。
       最大记录长度是 29。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.82 秒
      CPU 时间         0.04 秒



ERROR: 物理文件 winexcel|system 不存在。
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.92 秒
      CPU 时间         0.04 秒




ERROR: Unable to import, file d:\docs\Example.xls does not exist.
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: “PROCEDURE IMPORT”所用时间(总处理时间):
      实际时间         0.04 秒
      CPU 时间         0.03 秒

NOTE: 已取消文件引用名 FD 的分配。
NOTE: 已取消文件引用名 WORD 的分配。
NOTE: 已取消文件引用名 EXCEL 的分配。
NOTE: 已取消文件引用名 SASAUTOS 的分配。


求助高手,如何解决?
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 20 + 1 + 2 + 3 鼓励积极发帖讨论

总评分: 论坛币 + 20  学术水平 + 1  热心指数 + 2  信用等级 + 3   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

17
davil2000 发表于 2012-11-9 23:05:06
Imasasor 发表于 2012-11-9 22:44
198  x "cd d:\docs"
198!               ;
199  %macro word2sas(in=, out=);
PC配置较低 Winword启动延时了  
R是万能的,SAS是不可战胜的!

18
Imasasor 发表于 2012-11-9 23:18:33
davil2000 发表于 2012-11-9 23:05
PC配置较低 Winword启动延时了
上述问题解决了,我用你的方法让它延迟了一会儿。
解决后,又出现错误,提示import时找不到example.xls文件,我想着你里面没写路径,我加了路径D:\
现在能找到了,但是导入过程出错,后来我去d:\找到example.xls,试图打开,对话框提示“文件格式与扩展名不一致”,点确认后才打开。因此我想的是,文件格式应该是xlsx,只是把扩展名改了xls没有用,我的sas 是9.2,不支持xlsx导入。因此关键可能在最后几行代码?
put '[Select.Last.Cell()]';
put '[Copy]';
put '[quit]';
这三行是什么意思,如何控制,可以让它save成2003的格式?我对系统命令完全不懂,请指点一下。



日志如下:
NOTE: File EXCEL 是:
      DDE 会话,
      SESSION=excel|system,RECFM=V,LRECL=256

NOTE: 有 6 条记录写入到 File EXCEL 中。
       最小记录长度是 6。
       最大记录长度是 27。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         1.09 秒
      CPU 时间         0.03 秒



ERROR: Connect: 外部表不是预期的格式。
ERROR: LIBNAME 语句出错。
Connection Failed.  See log for details.
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: “PROCEDURE IMPORT”所用时间(总处理时间):
      实际时间         1.04 秒
      CPU 时间         0.04 秒

data _null_;
file excel;
put '[error(false)]';
put '[paste]';
put '[SAVE.AS("d:\Example.xls")]';
put '[Select.Last.Cell()]';
put '[Copy]';
put '[quit]';
run;
proc import datafile= "d:\Example.xls" out=&out dbms=excel replace;
getnames=no;
mixed=yes;
run;
filename fd "Example.xls";
%let rc=%sysfunc(fdelete(fd));
filename _all_ clear;

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 100 + 100 + 5 + 5 + 5 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

19
zhentao 发表于 2012-11-10 09:48:53
学习了,谢谢。

20
Imasasor 发表于 2012-11-10 13:09:48
davil2000 发表于 2012-11-9 19:12
options noxwait noxsync;
%let dirname = D:\Docs;
x "cd &dirname";
我都不知道该如何表达对您的敬仰之情了
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 08:14