sas 从 table 加载数组
sas load array from table
我需要将二维数组从 table 加载到 SAS 数据步骤,然后使用它在另一个 table 中执行变量转换。该数组看起来像这样:
- 行:initial_value 1-4
- 列:第 1-4 年
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
到目前为止,我已将数组硬编码为 sas 代码:
data example;
array lookup {4,4} _temporary_
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
;
set source(keep=(value years));
value_final = lookup{value, years};
run;
如何在不对矩阵进行硬编码的情况下做同样的事情,而是将 table 加载到数据步骤中并用作数组?
我会将查找 table 放入包含年份和值的数据集中。然后将其加载到关联数组中。
data lookup;
do value = 1 to 4;
do years = 1 to 4;
input value_final @;
output;
end;
end;
cards;
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
;;;;
run;
proc print;
run;
data source;
input years value @@;
cards;
3 2 4 1 5 0 2 2
;;;;
run;
data example;
if _n_ eq 1 then do;
if 0 then set lookup;
declare hash lookup(dataset:'lookup');
lookup.definekey('value','years');
lookup.definedata('value_final');
lookup.definedone();
end;
set source;
if lookup.find() ne 0 then call missing(value_final);
run;
proc print;
run;
你可以加载到数组中,但它有点笨拙,你必须知道维度。而且你必须检查我没有做的超出范围的下标。
data lookup;
do value = 1 to 4;
do years = 1 to 4;
input value_final @;
output;
end;
end;
cards;
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
;;;;
run;
proc print;
run;
data source;
input years value @@;
cards;
3 2 4 1 2 2
;;;;
run;
data example;
array lookup[4,4] _temporary_;
if _n_ eq 1 then do;
do while(not eof);
set lookup end=eof;
lookup[value,years]=value_final;
end;
end;
set source;
value_final=lookup[value,years];
run;
proc print;
run;
我需要将二维数组从 table 加载到 SAS 数据步骤,然后使用它在另一个 table 中执行变量转换。该数组看起来像这样:
- 行:initial_value 1-4
- 列:第 1-4 年
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
到目前为止,我已将数组硬编码为 sas 代码:
data example;
array lookup {4,4} _temporary_
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
;
set source(keep=(value years));
value_final = lookup{value, years};
run;
如何在不对矩阵进行硬编码的情况下做同样的事情,而是将 table 加载到数据步骤中并用作数组?
我会将查找 table 放入包含年份和值的数据集中。然后将其加载到关联数组中。
data lookup;
do value = 1 to 4;
do years = 1 to 4;
input value_final @;
output;
end;
end;
cards;
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
;;;;
run;
proc print;
run;
data source;
input years value @@;
cards;
3 2 4 1 5 0 2 2
;;;;
run;
data example;
if _n_ eq 1 then do;
if 0 then set lookup;
declare hash lookup(dataset:'lookup');
lookup.definekey('value','years');
lookup.definedata('value_final');
lookup.definedone();
end;
set source;
if lookup.find() ne 0 then call missing(value_final);
run;
proc print;
run;
你可以加载到数组中,但它有点笨拙,你必须知道维度。而且你必须检查我没有做的超出范围的下标。
data lookup;
do value = 1 to 4;
do years = 1 to 4;
input value_final @;
output;
end;
end;
cards;
1 1 2 3
2 2 2 3
3 4 4 4
4 4 5 6
;;;;
run;
proc print;
run;
data source;
input years value @@;
cards;
3 2 4 1 2 2
;;;;
run;
data example;
array lookup[4,4] _temporary_;
if _n_ eq 1 then do;
do while(not eof);
set lookup end=eof;
lookup[value,years]=value_final;
end;
end;
set source;
value_final=lookup[value,years];
run;
proc print;
run;