我有以下json格式的数据:
{"metadata1":"val1","metadata2":"val2","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}
在开头有一些元数据变量,它们只出现一次,然后是多个数据记录,它们都在同一行上。如何将其导入SAS数据集?
发布于 2015-07-31 10:53:53
/*Create json file containing sample data*/
filename json "%sysfunc(pathname(work))\json.txt";
data _null_;
file json;
put '{"metadata1":"val1,","metadata2":"val2}","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}';
run;
/*Data step for importing the json file*/
data want;
infile json dsd dlm='},' lrecl = 1000000 n=1;
retain metadata1 metadata2;
if _n_ = 1 then input @'metadata1":' metadata1 :$8. @'metadata2":' metadata2 :$8. @;
input @'var1":' var1 :8. @'var2":' var2 :8. @'var3":' var3 :8. @@;
run;
备注:
@'string'
逻辑设置的。,
和}
设置为分隔符,并在输入语句中使用:
格式修饰符,告诉SAS从指定的起始点读取字符,直到读取最大请求的数字或达到分隔符为止。dsd
将移除字符数据值中的双引号,并防止在字符变量包含分隔符时出现任何问题。@
告诉SAS继续使用相同的逻辑从同一行读取更多记录,直到到达行尾为止。lrecl
需要大于或等于文件的长度才能工作。n=1
将有助于减少内存使用,防止SAS试图缓冲多个输入行。https://stackoverflow.com/questions/31744378
复制相似问题