如何匹配SAS中的数据
How to match data in SAS
我有一个包含三个变量 var1
、var2
和 Price
的数据集。 Price
是 var2
的价格。 var1
是 Var2
的子样本。现在,我想通过匹配 Var1
的名称与 Var2
来查找 var1
中每个产品的价格。
数据看起来像这样。谁能帮我解决这个问题。非常感谢
Var1 Var2 Price
apple ?
apple 2
banana ?
banana 2.1
apple ?
orange ?
orange 4
banana ?
yoghurt 2
您可以通过 SQL 通过 var1/var2:
将您的价格合并到您的数据集来做到这一点
proc sql ;
create table output as
select a.var1, a.var2, b.price
from input a
left join (select distinct var2, price
from input
where not missing(var2)) as b
on (a.var1=b.var2
or a.var2=b.var2)
;quit ;
尝试使用散列table。
data want;
if 0 then set have(keep=var2 price where=(not missing(var2)));
if _n_=1 then do;
declare hash h (dataset:'have1(keep=var2 price where=(not missing(var2)))');
h.definekey('var2');
h.definedata('price');
h.definedone();
call missing(var2,price);
end;
set have;
rc=h.find(key:var1);
drop rc;
run;
我有一个包含三个变量 var1
、var2
和 Price
的数据集。 Price
是 var2
的价格。 var1
是 Var2
的子样本。现在,我想通过匹配 Var1
的名称与 Var2
来查找 var1
中每个产品的价格。
数据看起来像这样。谁能帮我解决这个问题。非常感谢
Var1 Var2 Price
apple ?
apple 2
banana ?
banana 2.1
apple ?
orange ?
orange 4
banana ?
yoghurt 2
您可以通过 SQL 通过 var1/var2:
将您的价格合并到您的数据集来做到这一点proc sql ;
create table output as
select a.var1, a.var2, b.price
from input a
left join (select distinct var2, price
from input
where not missing(var2)) as b
on (a.var1=b.var2
or a.var2=b.var2)
;quit ;
尝试使用散列table。
data want;
if 0 then set have(keep=var2 price where=(not missing(var2)));
if _n_=1 then do;
declare hash h (dataset:'have1(keep=var2 price where=(not missing(var2)))');
h.definekey('var2');
h.definedata('price');
h.definedone();
call missing(var2,price);
end;
set have;
rc=h.find(key:var1);
drop rc;
run;