使用SAS读取的原始文件包含以下记录:
123,“Harold Wilson”,Acct,01/15/1989,$ 78,123
128,“Julia Child”,Food,08/29/1988,$ 89,123
007,“詹姆斯邦德”,安全,02/01/2000,$ 82,100 828,“Roger Doger”,Acct,08/15/1999,$ 39,100900,“Earl Davenport”,Food,09/09/1989,$ 45,399
906年,“James Swindler”,Acct,12/21/1978,$ 78,200SAS CODE:
options nocenter;
filename file1 'D:\files\SAS\raw-files\employee.csv';
data Employ;
infile file1 dsd;
input id : $3.
name : $20.
depart : $8.
datehire : mmddyy10.
salary : dollar8.
;
format datehire mmddyy10.
salary dollar8.;
run;
title 'Employee details';
proc print data=Employ;
run;
输出
员工详细信息
Obs id name离开datehire薪水
1 123 Harold Wilson Acct 01/15/1989 $ 78
2 128 Julia Child Food 08/29/1988 $ 89
3 007 James Bond Security 02/01/2000 $ 82
4 828 Roger Doger Acct 08/15/1999 $ 39
5 900 Earl Davenport Food 09/09/1989 $ 45
6 906 James Swindler Acct 12/21/1978 $ 78
问题:
如何在忽略逗号后以与原始文件相同的格式获取薪水作为工资部分。
答案 0 :(得分:2)
如果您自己创建了此CSV文件,则应重新创建该文件。 SAS将数据值中的逗号视为字段分隔符(与任何其他应用程序一样)。
如果无法重新创建文件,可以将两列作为不同的文本变量读取,用逗号连接它们,并使用INPUT函数“读取”结果:
data Employ;
infile file1 dsd truncover;
input id : $3.
name : $20.
depart : $8.
datehire : mmddyy10.
salary_a : $8.
salary_b : $8.
;
salary = input( catx(',',salary_a,salary_b),dollar8.);
drop salary_a salary_b;
format datehire mmddyy10.
salary dollar8.;
run;
请注意,truncover
语句中添加了infile
选项。这对于允许SAS正确处理最后一个变量(salary_b)非常重要。
答案 1 :(得分:2)
继续鲍勃上面的优秀答案你也可以这样做:
data test;
infile cards dsd truncover;
input id name & : $20. depart : $12. datehire anydtdte10. salary comma8.;
format id z3. datehire mmddyy10. salary dollar8.;
cards;
123,"Harold Wilson",Acct,01/15/1989,$78,123
128,"Julia Child",Food,08/29/1988,$89,123
007,"James Bond",Security,02/01/2000,$82,100
828,"Roger Doger",Acct,08/15/1999,$39,100
900,"Earl Davenport",Food,09/09/1989,$45,399
906,"James Swindler",Acct,12/21/1978,$78,200
;
run;
proc print;
run;
答案 2 :(得分:2)
我解决了我的问题,即在读取工资变量而不是冒号(:)修饰符&符号(&) >而不使用 truncover
data Employ; infile file1 dsd; input id : $3. name : $20. depart : $8. datehire : mmddyy10. salary & dollar8. ; format datehire mmddyy10. salary dollar8.; run;
&符号(&)将继续读取工资变量,直到遇到两个逗号分隔符。因此,可以正确读取文件。