首页 文章

SAS:导入包含日期的CSV文件

提问于
浏览
0

我目前正在尝试将压缩的csv文件导入SAS,我有3列日期,格式为YYYY-MM-DD . 这个csv文件中的所有数据都是唯一的行,所以我认为它是一个字符串而不被识别为数字(对不起,我最近才开始编码,而且我还在学习很多基础知识) . 会发生什么事情是SAS假设8个字符并且它出现在2010-08-,基本上错过了这一天 . 我尝试了几种方法来解决使用输入,但到目前为止还没有解决它 . 我要么得到一个空列或者一个带有转换数字的列(例如52789 - 我猜这是从1960年的SAS用作参考的日期)我希望你们能给我一些提示如何完成 . 代码是:

FILENAME IPC3data zip 'C:\Users\********\IPC3data.zip'
member='tls201_appln.csv';
DATA newdata;
  INFILE IPC3data DLM=';' DSD FIRSTOBS=2;
  INPUT appln_id $ appln_auth $ appln_nr $ appln_kind $ appln_filing_date $ appln_filing_year $ appln_nr_epodoc $ appln_nr_original $ ipr_type $ internat_appln_id $ int_phase $ reg_phase $ nat_phase $ earliest_filing_date $ earliest_filing_year $ earliest_filing_id $ earliest_publn_date $ earliest_publn_year $ earliest_pat_publn_id $ granted $ docdb_family_id $ inpadoc_family_id $ docdb_family_size $ nb_citing_docdb_fam $ nb_applicants $ nb_inventors;
 Filing_date = input(appln_filing_date, ANYDTDTE10.);
 put Filing_date=YYMMDD10.;
 Early_filing_date = input(earliest_filing_date, ANYDTDTE10.);
 put Early_filing_date=YYMMDD10.;
 Early_publn_date = input(earliest_publn_date, ANYDTDTE10.);
 put Early_publn_date=YYMMDD10.;

跑;谢谢!

2 回答

  • 0

    定义变量,然后就不会出现截断问题 .

    就个人而言,我发现首先按照我想要使用LENGTH语句读取变量的顺序来定义变量要容易得多 . 这是一个相当于SAS如何根据您当前的INPUT语句猜测如何定义变量的方法,但我已将所有的... _ date变量更改为10个字符的字符串而不是默认的8个字符 . 您可能还应该更改某些其他变量的长度(甚至类型) .

    LENGTH appln_id appln_auth appln_nr appln_kind $8 appln_filing_date $10
           appln_filing_year appln_nr_epodoc appln_nr_original $8
           ipr_type internat_appln_id int_phase reg_phase nat_phase $8
           earliest_filing_date $10 earliest_filing_year earliest_filing_id $8
           earliest_publn_date $10 earliest_publn_year earliest_pat_publn_id $8
           granted docdb_family_id inpadoc_family_id docdb_family_size $8
           nb_citing_docdb_fam nb_applicants $8
           nb_inventors 8
    ;
    

    然后INPUT语句可以非常简单,因为您可以通过在第一个和最后一个变量名之间放置 -- 来使用位置变量列表 .

    input appln_id -- nb_inventors ;
    

    但实际上日期是SAS中的数字 . 您只需要使用特殊的信息和格式,以便SAS知道如何从人类可读的文本字符串进行翻译 . 因此,通过将长度从 $10 更改为 8 ,将日期变量更改为数字并附加相应的信息,SAS会将它们存储为日期而不是字符串 .

    informat appln_filing_date earliest_filing_date earliest_publn_date yymmdd.;
    format appln_filing_date earliest_filing_date earliest_publn_date yymmdd10.;
    
  • 0

    默认情况下,SAS字符串设置为8个字符,在您的情况下太短 .

    您可以使用LENGTH和INFORMAT语句指定数据的长度和读取方式

    在INFILE和INPUT之后,您可以添加LENGTH和/或INFORMAT语句 .

    INFORMAT指定变量在读取时的格式(在CSV文件中),而FORMATS控制格式在SAS中的显示方式 .

    您不需要将所有变量作为字符变量读取 . 您可以指定日期格式并键入

    FILENAME IPC3data zip 'C:\Users\********\IPC3data.zip' member='tls201_appln.csv';
    
    DATA newdata;
    
    INFILE IPC3data DLM=';' DSD FIRSTOBS=2;
    
    
    
    INPUT appln_id $ appln_auth $ appln_nr $ appln_kind $ appln_filing_date appln_filing_year $ appln_nr_epodoc $ appln_nr_original $ ipr_type $ internat_appln_id $ int_phase $ reg_phase $ nat_phase $ earliest_filing_date earliest_filing_year $ earliest_filing_id $ earliest_publn_date earliest_publn_year $ earliest_pat_publn_id $ granted $ docdb_family_id $ inpadoc_family_id $ docdb_family_size $ nb_citing_docdb_fam $ nb_applicants $ nb_inventors;
    
    
    INFORMAT appln_filing_date earliest_filing_date earliest_publn_date anydtdte.;
    FORMAT appln_filing_date earliest_filing_date earliest_publn_date DATE9.;
    

相关问题