sniperhgy 发表于 2014-10-24 10:46
楼主你好,我又来了,对于问题一,其实用import会比较简单一点,因为是csv文件,格式是都好分割,不 ...
关于第二段代码,出了点问题:
我拿我c盘里的两个csv文件进行测试:
kkkkkeee.csv
hoh.csv
kkkkkeee.csv:
x y
2 34
2 3
3 12
7 3
43 5
6 1
3 2
hoh.csv:
x y
2 4
21 43
4 4
6 1
45 3
2 5
21 1
都是随便输的。
代码几乎没有改动:
- data want;
- input x y type;
- run;
- filename indata pipe "dir c:\*.csv /b";
- data vname;
- length fname $20.;
- infile indata truncover;
- input fname $20.;
- call symput ('nvars',_n_);
- run;
- %macro want;
- %do i = 1 %to &nvars.;
- data _null_;
- set vname(firstobs = &i. obs = &i.);
- call symput ('file', strip(fname));
- run;
- proc import
- out = %substr(&file, 1, %length(&file) - 4)
- datafile = "c:\&file"
- dbms = csv replace;
- guessingrows = 32676;
- getname = YES;
- run;
- data %substr(&file, 1, %length(&file) - 4);
- set %substr(&file, 1, %length(&file) - 4);
- type = %substr(&file, 1, %length(&file) - 4);
- run;
- proc datasets noprint;
- append
- base = want
- data = %substr(&file, 1, %length(&file) - 4);
- quit;
- %end;
- %mend;
- %want
复制代码在给type赋值的data步之前没有任何问题,但之后
两个数据集中不但多了type变量,还多了一个叫kkkkkeee的变量,且两个变量都没有赋值。
最后日志是这样的:
NOTE: 由调用宏“WANT”生成行。
2 32676; getname = YES; run;
-------
1
WARNING 1-322: 假定符号 GETNAMES 被错拼为 getname。
ERROR: 文件正在使用中,c:\hoh.csv。
ERROR: 导入失败。详细信息,请参阅“SAS 日志”。
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE IMPORT”所用时间(总处理时间):
实际时间 0.15 秒
CPU 时间 0.15 秒
ERROR: 文件“WORK.HOH.DATA”不存在。
NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.HOH 可能不完整。该步停止时,共有 0 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.03 秒
CPU 时间 0.03 秒
NOTE: 正在追加 WORK.HOH 至 WORK.WANT。
WARNING: 变量 hoh 在 BASE 文件中未找到。变量将不能添加到 BASE 文件。
WARNING: 变量 x 在 DATA 文件中没有找到。
WARNING: 变量 y 在 DATA 文件中没有找到。
ERROR: 由于上面所列的异常,没有完成追加。 请用 FORCE 选项追加这些文件。
NOTE: 添加了 0 个观测。
NOTE: 数据集 WORK.WANT 有 0 个观测和 3 个变量。
NOTE: 由于上述错误,没有处理语句。
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE DATASETS”所用时间(总处理时间):
实际时间 0.03 秒
CPU 时间 0.03 秒
NOTE: 从数据集 WORK.VNAME. 读取了 1 个观测
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.00 秒
CPU 时间 0.00 秒
NOTE: 由调用宏“WANT”生成行。
6 32676; getname = YES; run;
-------
1
WARNING 1-322: 假定符号 GETNAMES 被错拼为 getname。
ERROR: 文件正在使用中,c:\kkkkkeee.csv。
ERROR: 导入失败。详细信息,请参阅“SAS 日志”。
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE IMPORT”所用时间(总处理时间):
实际时间 0.17 秒
CPU 时间 0.17 秒
ERROR: 文件“WORK.KKKKKEEE.DATA”不存在。
NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.KKKKKEEE 可能不完整。该步停止时,共有 0 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.01 秒
NOTE: 正在追加 WORK.KKKKKEEE 至 WORK.WANT。
WARNING: 变量 kkkkkeee 在 BASE 文件中未找到。变量将不能添加到 BASE 文件。
WARNING: 变量 x 在 DATA 文件中没有找到。
WARNING: 变量 y 在 DATA 文件中没有找到。
ERROR: 由于上面所列的异常,没有完成追加。 请用 FORCE 选项追加这些文件。
NOTE: 添加了 0 个观测。
NOTE: 数据集 WORK.WANT 有 0 个观测和 3 个变量。
NOTE: 由于上述错误,没有处理语句。
NOTE: 由于出错,SAS 系统停止处理该步。
NOTE: “PROCEDURE DATASETS”所用时间(总处理时间):
实际时间 0.03 秒
CPU 时间 0.03 秒