Sql 如何迭代SAS中的列表,并用导入的映射转换/替换每个片段?

Sql 如何迭代SAS中的列表,并用导入的映射转换/替换每个片段?,sql,dictionary,sas,mapping,Sql,Dictionary,Sas,Mapping,我是SAS的新手,不知道如何用导入SAS的翻译数据集(Have_2)替换数据集Have_1的每个部分 Data Have_1 1111 1234 2222 2938 3849 1234 9388 ... 2222 2222 Data Have_2 1111 a 1234 b 2222 c 2938 d 3849 e ... 9388 f Data Want a b c d

我是SAS的新手,不知道如何用导入SAS的翻译数据集(Have_2)替换数据集Have_1的每个部分

 Data Have_1
    1111 1234 2222
    2938 3849
    1234 9388
    ...
    2222 2222


  Data Have_2
    1111 a
    1234 b
    2222 c
    2938 d
    3849 e
    ...
    9388 f

 Data Want
    a b c
    d e
    b f
    c c

无论您是否要替换它们,这就是SAS中的
proc format
所做的-将一个值映射到另一个值

以下是您可以如何做到这一点。请注意,您不能重复使用原始的3个变量(因为它们是数字的),但如果您确实需要相同的变量名,您可以执行
重命名
删除
组合

直接使用
格式
语句也可以在视觉上获得相同的结果(但基本值仍然是数字值)


无论您是否要替换它们,这就是SAS中的
proc format
所做的-将一个值映射到另一个值

以下是您可以如何做到这一点。请注意,您不能重复使用原始的3个变量(因为它们是数字的),但如果您确实需要相同的变量名,您可以执行
重命名
删除
组合

直接使用
格式
语句也可以在视觉上获得相同的结果(但基本值仍然是数字值)

散列方法:

data want;
if 0 then set have_2;
if _n_=1 then do;
declare hash h(dataset:'have_2');
h.definekey('numval');
h.definedata('charval');
h.definedone();
end;
set have_1;
array var var:;
array new_var (3) $;
do i=1 to dim(var);
if h.find(key:var(i))=0 then new_var(i)=charval;
end;
keep new_var:;
run;
散列方法:

data want;
if 0 then set have_2;
if _n_=1 then do;
declare hash h(dataset:'have_2');
h.definekey('numval');
h.definedata('charval');
h.definedone();
end;
set have_1;
array var var:;
array new_var (3) $;
do i=1 to dim(var);
if h.find(key:var(i))=0 then new_var(i)=charval;
end;
keep new_var:;
run;

你真的需要转换它们吗?或者你只是想让他们打印出更加用户友好的描述?如果是后者,那么这看起来是一个完美的格式应用程序。你真的需要转换它们吗?或者你只是想让他们打印出更加用户友好的描述?如果是后者,那么这看起来是一个完美的格式应用程序。