转身未来 发表于 2019-5-31 14:25:27

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

data one;
array c{2} $ _temporary_ ("A", "B");
do i = 1 to dim(c);
    x = c;
    do j = 1 to 2;
      y = round(rannor(1), 0.0001);
      output;
    end;
end;
run;

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

-- CREATING AN EMPTY LUA TABLE --
local list = {}

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

    -- LOOP THROUGH VARIABLES IN EACH OBSERVATION --
    for var in sas.vars(dsid) do
      dict = obs
    end

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

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

-- PRINT OUT LUA TABLE --
for i = 1, #list do
    print(string.rep("*", 5).." RECORD: "..i.." "..string.rep("*", 5))
    for key, value in pairs(list) do
      print(key.." --> "..type(value).." --> "..value)
    end
    print("\n")
end
-- WRITE LUA TABLE INTO NEW SAS DATASET --
new_ds = "work.two"
sas.write_ds(list, new_ds)

-- SUBMITTING SAS CODE --
sas.submit([], {ds = new_ds})

endsubmit;
run;

*** OUTPUT SHOWN IN THE LOG ***
***** RECORD: 1 *****
y --> number --> 1.8048
j --> number --> 1
i --> number --> 1
x --> string --> A


***** RECORD: 2 *****
y --> number --> -0.0799
j --> number --> 2
i --> number --> 1
x --> string --> A


***** RECORD: 3 *****
y --> number --> 0.3966
j --> number --> 1
i --> number --> 2
x --> string --> B


***** RECORD: 4 *****
y --> number --> -1.0833
j --> number --> 2
i --> number --> 2
x --> string --> B


页: [1]
查看完整版本: 从SAS数据集获取数据到Lua表