我有一个特别的问题。我已经导出了一个csv文件,我在某些列上需要将数据放入quoation-marks中,因为前导零,有时一个长数据包在导出时包含“E”。现在我正在尝试将相同的文件导入SAS,以查看我的proc import-routine是否有效。
当我导入文件时,所有数据都会通过,但当我实际导出20列时,会被压缩成两列(因此我的分隔符错误?)。
并非所有列都用引号括起来,只是其中几个。数据的一个例子:
CustomerID CustomerName Product Price BillingNR
"01234" Customer 1 Product1 Price1 "03541"
"52465" Customer 2 Product2 Price2 ""
"23454" Customer 3 Product3 Price3 "035411236952154589632154"
然后将CustomerID和BillingNR括在引号中。
如果只有一些列用引号括起来而其他列不是,则如何导入此数据集? 或者只是从导入时删除所有双引号?继承我的代码:
%macro import;
%if &exist= "Yes" %then %do;
proc import
datafile= "\\mypath\data.csv"
DBMS=CSV
out=Sales
replace;
getnames=YES;
run;
%end;
%else %do;
%put Nothing happens;
%end;
%mend;
%lesInn;
IF / ELSE测试只是另一个宏,我测试指定的文件是否存在。我试图研究不同的方法,我仍在寻找类似的问题,但似乎没有任何工作。
所有答案都非常感谢。
托尔
答案 0 :(得分:0)
CSV - >逗号分隔值 我没有看到逗号被用作分隔符,而是管道。
指定您的分隔符是管道,并将GUESSINGROWS选项增加到一个大数字,以便它分配正确的长度和类型。
Proc import ... DBMS = DLM Replace;
Delimiter='|';
GuessingRows=10000;
....remaining options;
Run;
我还不确定Proc Import是否有效。如果您不需要编写数据步骤代码并确保指定将处理引号的DSD选项。
编辑:根据问题编辑,最准确的方法是通过数据步骤进行读取。如上所述,DSD选项将处理报价。
答案 1 :(得分:0)
如果您使用DSD选项读取文件,则SAS将自动删除值周围的引号。即使是大多数示例数据都不需要引用值的引号。
data want ;
infile cards dsd truncover firstobs=2;
length CustomerID $5 CustomerName $20 Product $20 Price $8 BillingNR $30 ;
input CustomerID -- BillingNR ;
cards;
CustomerID,CustomerName,Product,Price,BillingNR
"01234",Customer 1,Product1,Price1,"03541"
"52465",Customer 2,Product2,Price2,""
"23454",Customer 3,Product3,Price3,"035411236952154589632154"
;