设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1411|回复: 0

从SAS数据集获取数据到Lua表

[复制链接]

18

主题

107

金钱

180

积分

入门用户

发表于 2019-5-31 14:25:27 | 显示全部楼层 |阅读模式
  1. data one;
  2.   array c{2} $ _temporary_ ("A", "B");
  3.   do i = 1 to dim(c);
  4.     x = c[i];
  5.     do j = 1 to 2;
  6.       y = round(rannor(1), 0.0001);
  7.       output;
  8.     end;
  9.   end;
  10. run;

  11. proc lua;
  12. submit;
  13.   -- OPEN SAS DATASET FOR READING --
  14.   local dsid = sas.open("work.one", i)

  15.   -- CREATING AN EMPTY LUA TABLE --
  16.   local list = {}

  17.   -- LOOP THROUGH OBSERVATIONS IN SAS DATASET --
  18.   for obs in sas.rows(dsid) do
  19.     local dict = {}

  20.     -- LOOP THROUGH VARIABLES IN EACH OBSERVATION --
  21.     for var in sas.vars(dsid) do
  22.       dict[var.name] = obs[var.name]
  23.     end

  24.     -- INSERT EACH RECORD INTO LUA TABLE --
  25.     table.insert(list, dict)

  26.     -- CLOSE SAS DATASET AFTER THE LAST RECORD --
  27.     if #list == sas.nobs(dsid) then
  28.       sas.close(dsid)
  29.     end
  30.   end

  31.   -- PRINT OUT LUA TABLE --
  32.   for i = 1, #list do
  33.     print(string.rep("*", 5).." RECORD: "..i.." "..string.rep("*", 5))
  34.     for key, value in pairs(list[i]) do
  35.       print(key.." --> "..type(value).." --> "..value)
  36.     end
  37.     print("\n")
  38.   end
  39.   -- WRITE LUA TABLE INTO NEW SAS DATASET --
  40.   new_ds = "work.two"
  41.   sas.write_ds(list, new_ds)

  42.   -- SUBMITTING SAS CODE --
  43.   sas.submit([[proc print data = @ds@ noobs; run]], {ds = new_ds})

  44. endsubmit;
  45. run;

  46. *** OUTPUT SHOWN IN THE LOG ***
  47. ***** RECORD: 1 *****
  48. y --> number --> 1.8048
  49. j --> number --> 1
  50. i --> number --> 1
  51. x --> string --> A


  52. ***** RECORD: 2 *****
  53. y --> number --> -0.0799
  54. j --> number --> 2
  55. i --> number --> 1
  56. x --> string --> A


  57. ***** RECORD: 3 *****
  58. y --> number --> 0.3966
  59. j --> number --> 1
  60. i --> number --> 2
  61. x --> string --> B


  62. ***** RECORD: 4 *****
  63. y --> number --> -1.0833
  64. j --> number --> 2
  65. i --> number --> 2
  66. x --> string --> B
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表