SAS没有读取csv文件的第一列

时间:2015-12-21 18:35:18

标签: csv sas

我正在尝试在SAS中获取文本文件。数据没有任何标题。我想要的是删除基于第3列值的重复项。文本文件看起来像 -

P0780043,866.05,2200,3.79,140,1
P0780043,866.05,2300,3.84,140,1
P0780043,866.05,2300,3.84,140,1
P0780043,866.05,0000,3.89,140,1

我希望结果是 -

P0780043,866.05,2200,3.79,140,1
P0780043,866.05,2300,3.84,140,1
P0780043,866.05,0000,3.89,140,1

我正在使用以下代码 -

%let flname1=D:\temp\wq_%sysfunc(today(),yymmddn8.).txt;
%put &=flname1;
data one;
infile "&flname1" dsd dlm=',';
input x1-x6;
proc sort data=one out=nodup nodupkey;
By x3;
run;

由于某种原因,代码不会读取第一列。我不确定为什么会这样。它可能非常明显,但我对SAS来说还是个新手。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您的问题是第一列是字符,您的程序正在尝试将其读取为数字。将第一列作为字符读取或将它们全部读作字符。

data one;
  infile "&flname1" dsd dlm=',';
  length x1 $8 ;
  input x1-x6;
run;
proc sort data=one out=nodup nodupkey;
  by x3;
run;

答案 1 :(得分:0)

汤姆砸在鼻子上;你必须告诉SAS将变量读入字符,或者假设它们是数字。

在您的特定情况下,如果您想要在不考虑它的情况下阅读它,您可以使用PROC IMPORT来确定每个列应该被读取的内容以及某种程度的成功;它有缺点(特别是如果你的数据主要是数字,但偶尔有字符值)。

proc import file="&flname1." out=one dbms=csv replace;
  getnames=no;  *Instructs SAS not to treat the first row as variable names;
run;

当您要手动查看数据并且数据相当一致时,这是常用的东西;如果你在生产环境中运行它(特别是当你没有查看每次运行的文件时),使用它是一个坏主意,因为文件的某些细节(特别是列长度和格式)可能会在运行之间发生变化。它还可以在日志中生成代码,您可以将其复制/粘贴到.sas文件中代替PROC IMPORT,如果您想要infile读入但希望SAS生成第一遍,这样您就不必输入它全在。