如何在sas中更改导入的csv变量

如何在sas中更改导入的csv变量,csv,sas,Csv,Sas,我在SAS中导入了csv,但是原始文件中的格式不正确。我使用的是地址,例如,城市将错误地连接到street变量,或者邮政编码将位于city变量中。导入后如何设置参数。当我尝试使用set length时,它给了我一条消息,告诉我之前已经设置了长度,我应该使用数据步骤。我不知道具体在哪里做这件事 那么,您可以手动定义哪些行以及如何读取到SAS中。下面是一个来自Proc import的示例 只需更改分隔符在这种情况下。此外,根据您的数据是否具有标题行,请正确设置第一个OBS。除此之外,只需列出变量及其

我在SAS中导入了csv,但是原始文件中的格式不正确。我使用的是地址,例如,城市将错误地连接到street变量,或者邮政编码将位于city变量中。导入后如何设置参数。当我尝试使用set length时,它给了我一条消息,告诉我之前已经设置了长度,我应该使用数据步骤。我不知道具体在哪里做这件事

那么,您可以手动定义哪些行以及如何读取到SAS中。下面是一个来自Proc import的示例

只需更改分隔符在这种情况下。此外,根据您的数据是否具有标题行,请正确设置第一个OBS。除此之外,只需列出变量及其属性

data WORK.Imported;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile 'c:\input\datafile.csv' delimiter =';' MISSOVER DSD lrecl=13106 firstobs=2 ;
    informat first_var $15. ;
    informat second_var $24. ;
    informat third_var best32. ;
    /*... add as many as your data has */
    format first_var $15. ;
    format second_var $24. ;
    format third_var best12. ;
    /*... add as many as your data has */
    input
    First_var $
    Second_var $
    CCM
    /*... add as many as your data has */
    ;
    if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
run;
惰性方法只是使用带有guessingrows=max选项的proc导入:

proc import datafile="c:\imput\input.csv" out=imprted replace;
        DELIMITER=";" ;
        getnames=yes;
        guessingrows=MAX; 
run;
请注意,在非常大的文件中,这将花费很长时间。通常最好将行设置为“足够大”,如32k


有关导入的详细信息,请参阅。或者更一般地说,这个问题也发生在我身上,问题是输入csv文件中使用了一些“换行符”。如果用空格替换所有换行符,保存文件,然后在SAS中导入-它将正确导入数据。 做到这一点的简单方法是:

  • 按Ctrl+H打开“查找和替换”对话框
  • 在“查找内容”字段中,输入Ctrl+J。它看起来是空的,但您会看到一个小点
  • 在“替换为”字段中,输入任何值以替换换行符。通常是空格,以避免两个单词意外连接。如果您只需要删除换行符,请将“替换为”字段留空

  • 显示一些示例csv数据,描述如何导入,以及您尝试的SAS代码示例。显示您的代码。听起来像是在SET语句之后添加了一个LENGTH语句,以便SAS在查看传入数据集中的变量时已经定义了变量长度。