从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]