在SAS中导入单行json文件
我有以下json格式的数据:在SAS中导入单行json文件,json,sas,Json,Sas,我有以下json格式的数据: {"metadata1":"val1","metadata2":"val2","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]} 在开头有一些元数据变量,它们只出现一次,后面是多个数据记录,都在同一行上。如何将其导入SAS数据集 /*Create json file containing sample data*/ filename json "%sysfunc(path
{"metadata1":"val1","metadata2":"val2","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}
在开头有一些元数据变量,它们只出现一次,后面是多个数据记录,都在同一行上。如何将其导入SAS数据集
/*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;
注:
- SAS开始读取每个变量的点是使用
逻辑设置的李>@'string'
- 将
和、
设置为分隔符,并在输入语句上使用}
格式修饰符,告诉SAS保持从指定的起点读取字符,直到读取请求的最大数字或达到分隔符为止:
- 在infle语句上设置
,将从字符数据值中删除双引号,并防止在字符变量包含分隔符时出现任何问题dsd
- 双尾随
告诉SAS继续使用相同的逻辑从同一行读取更多记录,直到它到达行的末尾@
- 元数据变量作为特例使用单独的输入语句进行处理。如果需要,可以很容易地将它们转移到单独文件中的一行
需要大于或等于文件的长度才能使用此方法lrecl
- 设置
可以防止SAS尝试缓冲多个输入行,从而有助于减少文件非常大时的内存使用n=1
scan
就可以做这类事情。我想我看到了元数据记录的不同,尽管我不确定您的示例在这方面是否真的有那么好-您是否可以改进它:重新阅读它们,或者自动阅读?否则,“不使用扫描”位,也许您可以回答有关链接的问题。我认为这个问题/答案总体上还是有用得多的(考虑到多种方法——我认为之前还有另外一种方法也有几个例子)。特别是,这里有一个“假”json文件——如果有一个真实的示例会更好。或者至少有一个看起来像真实的示例。我最近遇到了一个具有这种精确结构的json文件——只有变量名和值被更改了。