我正在尝试在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来说还是个新手。任何帮助,将不胜感激。谢谢!
答案 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)
在您的特定情况下,如果您想要在不考虑它的情况下阅读它,您可以使用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生成第一遍,这样您就不必输入它全在。