我试图将包含一些日期列/字段的数据导入到SAS中。数据采用JSON格式,因此需要在导入之前进行转换。这是我使用的SAS libname JSON。
但是,当我转换/导入数据时,SAS并不将日期解释为正确的日期,并且允许我使用日期约束等操作数据。相反,SAS以Format =$的形式导入日期。但是数据显示在导入的数据中。SAS没有错误地导入数据,但是数据中的“date_fi”以外的任何其他日期字段都没有正确地格式化为日期。
我正在使用以下脚本
文件名resp“C:\Temp\transakmenter-07.json”lrecl=1000000000;文件名jmap "C:\Temp\transaktioner.map";文件名头"c:\temp\header.txt"; 选项metaserver=“域”“metaport=8561 metarepository=”基础“metauser=”用户“元类=‘审查’; libname客户端sasiola tag=SOMETAG port=10011 host=“域名”signer="https://CENSORED"; HEADEROUT=head url=‘查看/按月查看?key=“2017-07” method= "GET“CT="application/ JSON”out=resp;libname space JSON fileref=resp map=jmap ;*automap=create; LIBNAME SASDATA碱基"D:\SASData";* outencoding='UTF-8'; 数据SASDATA.Transaktioner;设置space.Rows_value;运行; 数据null;如果存在(“Acubiz.EMS_TRANSAKTIONER”、“数据”),则rc=dosubl("proc;drop Acubiz.EMS_TRANSAKTIONER;quit;"); 数据Acubiz.EMS_TRANSAKTIONER;设置sasdata.transaktioner;运行; proc metalib;omr (library="/Shared Data/SAS Visual /Shared repname=“Foundation);folder="/Shared Data/SAS Visual Analytics/Autoload/AcubizEMSAutoload";选择("EMS_TRANSAKTIONER");运行;退出; 名称客户端清晰; 名称空间清晰;
对于这个转换,我使用以下名为'transaktioner.map‘的JSON map.file。
字段date_fi以正确的日期格式导入,我可以在中将其操作为日期格式,但confirmeddate_fi不导入。
这个文件中最重要的部分就在这里。
{
"NAME": "date_fi",
"TYPE": "NUMERIC",
"INFORMAT": [ "e8601dt19", 19, 0 ],
"FORMAT": ["DATETIME", 20],
"PATH": "/root/rows/value/date_fi",
"CURRENT_LENGTH": 20
},
{
"NAME": "confirmeddate_fi",
"TYPE": "NUMERIC",
"INFORMAT": [ "e8601dt19", 19, 0 ],
"FORMAT": ["DATETIME", 20],
"PATH": "/root/rows/value/confirmeddate_fi",
"CURRENT_LENGTH": 20
},你们知道我如何导入数据并解释日期字段吗?
我一直在处理JSON映射文件中的不同信息,以解决这个谜团,并设法在没有错误的情况下导入数据,但是SAS并不这样解释日期字段。
这里用一些示例(取自导入的数据)解释了实际字段:
Reference that works
date_fi: "2017-07-14T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
Should work
invoicedate_fi: "2017-08-01T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
invoicedate_fi: "2017-07-19T00:00:00"
invoicedate_fi: "2017-07-17T00:00:00"
arrivaldate_fi: "2017-08-13T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
departuredate_fi: "2017-08-09T00:00:00" (Apparantly never timestamped but use T00:00:00 - checked 9 instances)
Do not work as numeric - even though they are specified as dates in map-file (for use with SAS JSON Libname)
markedreadydate_fi: "2017-08-02T11:41:56" (This field is often but not always timestamped)
markedreadydate_fi: "2017-07-31T15:08:03"
markedreadydate_fi: "2017-07-19T00:00:00"
confirmeddate_fi: "2017-07-21T00:00:00" (This field is often but not always timestamped)
confirmeddate_fi: "2017-08-06T20:11:26"
confirmeddate_fi: "2017-07-14T18:38:41"
confirmeddatefinance_fi: "2017-07-31T15:54:10" (This field is often but not always timestamped)
confirmeddatefinance_fi: "2017-08-17T10:33:32"
confirmeddatefinance_fi: "2017-07-26T08:21:34"
markedreadydate_fi: "2017-07-19T00:00:00" (This field is often but not always timestamped)有人在这个问题上有相关的信息吗,因为我的智慧已尽?在这个日期问题上已经用尽了SAS的技术支持。
PS:作为概念的证明,我们正在引进大约110.000行。而导入完成时没有任何错误。
这里可以找到一个很好的PDF来解释SAS中不同的ISO格式。
发布于 2017-08-25 08:20:42
显然,解决方案是开始以字符而不是数字的形式导入日期列。因此,在SAS代码中将其转换为日期格式,如下所示:
Data SASDATA.Transaktioner(drop=
arrivaldate_fi_temp
departuredate_fi_temp
confirmeddate_fi_temp
confirmeddatefinance_fi_temp
datetoshow_fi_temp
date_fi_temp
invoicedate_fi_temp
markedreadydate_fi_temp
);
Set space.Rows_value(rename=(
confirmeddate_fi=confirmeddate_fi_temp
datetoshow_fi=datetoshow_fi_temp
date_fi=date_fi_temp
invoicedate_fi=invoicedate_fi_temp
markedreadydate_fi=markedreadydate_fi_temp
arrivaldate_fi=arrivaldate_fi_temp
departuredate_fi=departuredate_fi_temp
confirmeddatefinance_fi=confirmeddatefinance_fi_temp
));
*length invoicedate_fi 8.;
format
confirmeddate_fi
datetoshow_fi
date_fi
invoicedate_fi
markedreadydate_fi
arrivaldate_fi
departuredate_fi
confirmeddatefinance_fi
datetime20.;
if confirmeddate_fi_temp ne '' then confirmeddate_fi=input(confirmeddate_fi_temp,E8601DT19.); else confirmeddate_fi=.;
if datetoshow_fi_temp ne '' then datetoshow_fi=input(datetoshow_fi_temp,E8601DT19.); else datetoshow_fi=.;
if date_fi_temp ne '' then date_fi=input(date_fi_temp,E8601DT19.); else date_fi=.;
if invoicedate_fi_temp ne '' then invoicedate_fi=input(invoicedate_fi_temp,E8601DT19.); else invoicedate_fi=.;
if markedreadydate_fi_temp ne '' then markedreadydate_fi=input(markedreadydate_fi_temp,E8601DT19.); else markedreadydate_fi=.;
if arrivaldate_fi_temp ne '' then arrivaldate_fi=input(arrivaldate_fi_temp,E8601DT19.); else arrivaldate_fi=.;
if departuredate_fi_temp ne '' then departuredate_fi=input(departuredate_fi_temp,E8601DT19.); else departuredate_fi=.;
if confirmeddatefinance_fi_temp ne '' then confirmeddatefinance_fi=input(confirmeddatefinance_fi_temp,E8601DT19.); else confirmeddatefinance_fi=.;
run;然后,我将删除用于导入地图文件中日期字段的数字类型的所有细节。这样,JSON libname就不负责解释日期格式了。SAS有。
即。对于alle日期字段,必须将映射文件规范更改为类似于此的内容。
{
"NAME": "date_fi",
"TYPE": "CHARACTER",
"PATH": "/root/rows/value/date_fi",
"CURRENT_LENGTH": 19
},https://stackoverflow.com/questions/45838559
复制相似问题