首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入SAS中的单行json文件。

导入SAS中的单行json文件。
EN

Stack Overflow用户
提问于 2015-07-31 10:51:23
回答 1查看 603关注 0票数 3

我有以下json格式的数据:

代码语言:javascript
运行
复制
{"metadata1":"val1","metadata2":"val2","data_rows":[{"var1":1,"var2":2,"var3":3},{"var1":4,"var2":5,"var3":6}]}

在开头有一些元数据变量,它们只出现一次,然后是多个数据记录,它们都在同一行上。如何将其导入SAS数据集?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 10:53:53

代码语言:javascript
运行
复制
/*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从指定的起始点读取字符,直到读取最大请求的数字或达到分隔符为止。
  • 在infile语句上设置dsd将移除字符数据值中的双引号,并防止在字符变量包含分隔符时出现任何问题。
  • 双尾@告诉SAS继续使用相同的逻辑从同一行读取更多记录,直到到达行尾为止。
  • 元数据变量是使用单独的输入语句作为特例处理的。如果需要,它们可以很容易地转到单独文件中的一行。
  • lrecl需要大于或等于文件的长度才能工作。
  • 如果您的文件非常大,设置n=1将有助于减少内存使用,防止SAS试图缓冲多个输入行。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31744378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档