我从R来到SAS,这个问题很容易解决。
我正在尝试使用%Macro
函数加载一堆CanSim CSV文件(一个example table here)。
%Macro ReadCSV (infile , outfile );
PROC IMPORT
DATAFILE= &infile.
OUT= &outfile.
DBMS=CSV REPLACE;
GETNAMES=YES;
DATAROW=2;
RUN;
%Mend ReadCSV;
%ReadCSV("\\DATA\CanSimTables\02820135-eng.csv", work.cs02820135);
%ReadCSV("\\DATA\CanSimTables\02820158-eng.csv", work.cs02820158);
问题是,只要缺少值,数字Value
列就会在所有csv中都有“..”。当IMPORT
到达具有此字符串的行时,这会产生错误。
有没有办法告诉IMPORT
是否应删除任何“..”或将其视为缺失值? (我发现论坛引用了DSD
选项,但这似乎对我没有帮助。)
谢谢!
答案 0 :(得分:3)
PROC IMPORT只能猜测数据的结构。例如,它可能会看到..
并假设该列包含字符串而不是数字。它还可以做出其他可能导致生成的数据集失效的决定。
您可以更好地编写自己的数据步骤代码来读取文件。这不是很难。对于您的示例链接文件,我所做的只是复制并粘贴CSV文件的第一行并删除逗号,使名称成为有效的变量名称,并对字符变量的制作时间进行一些猜测。
data want ;
infile "&path/&fname" dsd truncover firstobs=2 ;
length Ref_Date $7 GEO $100 Geographical_classification $20
CHARACTERISTICS $100 STATISTICS DATATYPE $50 Vector Coordinate $20
Value 8
;
input (Ref_Date -- Value) (??) ;
run;
??
修饰符会告诉SAS在尝试将VALUE列中的文本转换为数字时不报告任何错误。因此文件中的..
和其他垃圾会生成缺失值。
答案 1 :(得分:0)
与此问题没有明确相关,但是 - 如果您的问题是" N"或" D"或者你想要丢失的类似的东西,会有一个更简单的解决方案:missing statement
(重要的是与missing option
不同)。
missing M;
告诉SAS将数据中的单个字符M
视为缺失值,并相应地读取它。它将以.M
特殊缺失值读取它,其功能类似于.
常规缺失(但在等式语句中实际上不相等)。