我目前正在尝试将压缩的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 回答
定义变量,然后就不会出现截断问题 .
就个人而言,我发现首先按照我想要使用LENGTH语句读取变量的顺序来定义变量要容易得多 . 这是一个相当于SAS如何根据您当前的INPUT语句猜测如何定义变量的方法,但我已将所有的... _ date变量更改为10个字符的字符串而不是默认的8个字符 . 您可能还应该更改某些其他变量的长度(甚至类型) .
然后INPUT语句可以非常简单,因为您可以通过在第一个和最后一个变量名之间放置
--
来使用位置变量列表 .但实际上日期是SAS中的数字 . 您只需要使用特殊的信息和格式,以便SAS知道如何从人类可读的文本字符串进行翻译 . 因此,通过将长度从
$10
更改为8
,将日期变量更改为数字并附加相应的信息,SAS会将它们存储为日期而不是字符串 .默认情况下,SAS字符串设置为8个字符,在您的情况下太短 .
您可以使用LENGTH和INFORMAT语句指定数据的长度和读取方式
在INFILE和INPUT之后,您可以添加LENGTH和/或INFORMAT语句 .
INFORMAT指定变量在读取时的格式(在CSV文件中),而FORMATS控制格式在SAS中的显示方式 .
您不需要将所有变量作为字符变量读取 . 您可以指定日期格式并键入