【问题标题】:Importing data to SAS from a csv file从 csv 文件将数据导入 SAS
【发布时间】:2015-02-22 20:57:18
【问题描述】:

我正在处理一个锻炼应用程序的 .csv 导出文件。它记录日期、时间、锻炼、次数、重量和 cmets。像许多 .csv 文件一样,它有点乱。

例子:

Date,Time,Exercise,# of Reps,Weight,Comments12/23/2014,14:52,Hip Abduction,30,180,12/23/2014,14:52,Hip Abduction,30,180,12/23/2014,14:51,Inverse Bench,15,95,12/23/2014,14:51,Abb Twist,30,100,12/23/2014,14:51,Pull-Ups,5,170,12/23/2014,14:27,Squat,15,135,12/23/2014,14:27,Squat,15,13512/23/2014,14:27,Squat,15,13512/23/2014,14:27,Deadlift,15,135,12/23/2014,14:27,Crunch,30,170,12/23/2014,14:27,Crunch,30,17012/23/2014,14:27,Crunch,30,17012/23/2014,14:26,Bench,15,135,12/23/2014,14:26,Bench,15,13512/23/2014,14:26,Bench,15,135,etc...

我已经能够导入数据,但是字符数限制为 8 个;如日期和锻炼变量所示。

SAS 代码:

DATA strength;
    infile 'C:\Users\user\Google Drive\strength.csv' DLM = ',' DSD;
    input Date $ Time $ Exercise $ Reps Weight Comments;
    if date = 'Date' then delete;   *removes first obs - the csv header;
RUN;

PROC PRINT data = strength;
    title 'Simple Work Out Log Export';
RUN;

SAS 输出:

Obs      Date      Time     Exercise    Reps    Weight    Comments

     1    12/23/20    14:52    Hip Abdu      30      180         .
     2    12/23/20    14:52    Hip Addu      30      180         .
     3    12/23/20    14:51    Inverse       15       95         .
     4    12/23/20    14:51    Abb Twis      30      100         .
     etc...

我没有太多使用 .csv 文件的经验,但我确实尝试过使用

input Date $ Time $ Exercise $ 12. ....

但这不起作用,因为不同的练习有不同的长度名称。

我将如何为这样的原始 .csv 数据文件导入完整的日期和练习名称?

谢谢!

【问题讨论】:

    标签: csv input sas raw-data character-limit


    【解决方案1】:

    也可以编写一个稍微复杂的输入语句来执行您想要的操作,而无需使用信息语句:

    input date :mmyydd10. time :time. Exercise :$32. reps :8. weight :8.;
    

    然后您可以应用日期和时间格式:

    format date mmddyy10. time time.;
    

    【讨论】:

      【解决方案2】:

      您可以在INFORMAT 语句中声明变量的长度。

      input 之前试试这个。

      informat var1 $X1. var2 $X2.;
      

      var1var2 替换变量名,用X1X2 替换长度。

      您可以使用informat 将日期和时间作为实际日期和时间类型读取。您还可以在infile 语句中使用FIRSTOBS=2 指定从第2 行开始的读取。

      我可以在http://support.sas.com/documentation/onlinedoc/base/index.html 的在线 SAS 文档中查找所有这些语句。

      使用informat 声明日期和时间可以在这里找到http://support.sas.com/documentation/cdl/en/leforinforref/64790/HTML/default/viewer.htm#n0cq8eha2o93mdn1lg8n5ursmkxm.htm

      【讨论】:

        【解决方案3】:

        此处使用冒号运算符

        您在这里看到每个信息前面都有一个冒号。这个冒号(称为信息 修饰符)告诉 SAS 使用提供的信息 但停止读取此值 遇到分隔符时的变量。不要忘记冒号,因为没有它们 SAS 可能会读取分隔符以满足信息中指定的宽度。

        DATA strength;
        format date mmddyy10. time time.;
            infile 'C:\Users\user\Google Drive\strength.csv' DLM = ',' DSD;
            input date : mmyydd10. 
                  time : time. 
                  Exercise : $50. /*Maximum length of Execrise in your dataset,have assumed 50*/
                  reps : 8. 
                  weight : 8.
                  Comments : $50.; /*Maximum length of comments in your dataset,have assumed 50*/
        
            if date = 'Date' then delete;   *removes first obs - the csv header;
        RUN;
        
        PROC PRINT data = strength;
            title 'Simple Work Out Log Export';
        RUN;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-13
          • 2015-09-03
          • 1970-01-01
          • 2015-06-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多