【发布时间】:2017-08-29 15:44:05
【问题描述】:
我的目标是从 CSV 文件中获取几个名为 tempi 的数字列,以便进一步进行其他分析。不幸的是,最后一列是作为文本类型获得的。我在 SAS 文档中读到 input() 函数可以将文本转换为数字格式,所以我尝试调用它,但前 5 行失败,显示在日志窗口中:
NOTE: Invalid argument to function INPUT at line 3278 column 10.
我通过检查该列中每个元素的十六进制代码来解决它。正如我所注意到的,只有最后一行(即成功行)没有 CR 字符(0D)。其他人都明白了。我发现 compress 函数对范围很有用,所以我在数据步骤中使用了它,但它没有删除 CR 字符。 我给你看我的代码:
data work.meteo;
drop var7;
set work.meteo(rename=(var1=Prov var2=temp1 var3=temp2 var4=temp3 var5=temp4));
x=compress(var6, '\r');
format x $hex10.;
temp5 = input(x, 8.);
run;
我认为 compress 不能与列名一起使用,但我如何遍历列值以正确调用它?有没有更好的方法来达到同样的目标? 谢谢。
对乔的回答编辑问题: 是的,我尝试了两种读取 csv 源文件的方法;第一个包含 Proc 导入:
proc import datafile = 'path-file\...\meteo.csv'
out= work.meteo
dbms = CSV replace;
getnames = no;
run;
第二个是用infile 和termstr 制作的。
data mydata;
infile "path-file\...\meteo.csv"
dsd termstr=crlf truncover;
input Prov $ temp1 temp2 temp3 temp4 temp5 ;
run;
在最后一种方法中,它会导致 temp5 中没有值的数据集(最后一行除外)。
【问题讨论】: