Joz*_*Joz 6 csv sas decimalformat
我已经(并将在未来收到)许多CSV文件,这些文件使用分号作为分隔符,逗号作为小数分隔符.到目前为止,我无法找到如何使用proc导入将这些文件导入SAS - 或以任何其他自动方式导入,而无需手动处理变量名称.
创建一些示例数据:
%let filename = %sysfunc(pathname(work))\sap.csv;
data _null_;
file "&filename";
put 'a;b';
put '12345,11;67890,66';
run;
Run Code Online (Sandbox Code Playgroud)
导入代码:
proc import out = sap01
datafile= "&filename"
dbms = dlm;
delimiter = ";";
GETNAMES = YES;
run;
Run Code Online (Sandbox Code Playgroud)
导入后,变量"AMOUNT"的值,例如350,58(相当于美国格式的350.58)在SAS中看起来像35,058(意思是三十五......)(并且在重新导出到德国EXCEL之后看起来像35.058,00).一个简单但又脏的解决方法如下:
data sap02; set sap01;
AMOUNT = AMOUNT/100;
format AMOUNT best15.2;
run;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法来定义CVS-import的小数分隔符(类似于分隔符的规范)...或任何其他"清洁"解决方案与我的解决方法相比.提前谢谢了!
你应该在技术上使用dbms=dlm不dbms=csv,尽管它理出头绪.CSV表示"逗号分隔值",而DLM表示"分隔",这在此是正确的.
我认为有一种直接的方法可以让SAS通过逗号来读入PROC IMPORT.在读取数据时,您需要告诉SAS使用NUMXw.d信息,我没有办法在SAS中强制设置该设置.(有一个用逗号输出的选项NLDECSEPARATOR,但我认为这不适用.)
最好的办法是自己编写数据步骤代码,或者运行PROC IMPORT,转到日志,然后将读入的代码复制/粘贴到程序中; 然后为每个读入记录添加:NUMX10.或者适当的最大字段宽度.它最终会看起来像这样:
data want;
infile "whatever.txt" dlm=';' lrecl=32767 missover;
input
firstnumvar :NUMX10.
secondnumvar :NUMX10.
thirdnumvar :NUMX10.
fourthnumvar :NUMX10.
charvar :$15.
charvar2 :$15.
;
run;
Run Code Online (Sandbox Code Playgroud)
它还会生成大量的信息和格式代码; 您可以交替转换信息,NUMX10.而BEST.不是将信息添加到读入.您也可以删除信息,除非您有日期字段.
data want;
infile "whatever.txt" dlm=';' lrecl=32767 missover;
informat firstnumvar secondnumvar thirdnumvar fourthnumvar NUMX10.;
informat charvar $15.;
format firstnumvar secondnumvar thirdnumvar fourthnumvar BEST12.;
format charvar $15.;
input
firstnumvar
secondnumvar
thirdnumvar
fourthnumvar
charvar $
;
run;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17484 次 |
| 最近记录: |