我有两个数据集,其中一些记录彼此相关。
例如
数据集1
变量1
abcde
坏男人
大爆炸
奇怪的
每天
确切地
数据集2
变量1
美国广播公司
cde
坏的
坏人一个
陌生人
现在我想使用循环逻辑比较这些记录,这是我的代码。
%let id1=%sysfunc(open(dataset2,in)); %let colterm=%sysfunc(varnum(&id1,var1)); %do %while(%sysfunc(fetch(&id1)) eq 0); %let vterm=%sysfunc(getvarc(&id1,&colterm));
data dataset1;
set dataset1;
if index(strip(var1),strip("&vterm"))>0 or index(strip("&vterm"),strip(var1))>0 then do;/*when one contains the other*/
match="Fuzzy";
cnt=cnt+1;
end;
run;
%end;
proc sql noprint;
select max(cnt) into:maxnum/*to get max cnt*/
from dataset1;
quit;
现在 dataset1 如下所示
Var1 cnt 匹配
abcde 2 模糊
坏人2模糊
大爆炸 0
奇怪 1 模糊
每天 0
正好 0
我想将 dataset2 中的相关记录合并到 dataset1 中,新的 dataset1 应该如下所示
Var1 cnt 匹配 FM_dataset2_1 FM_dataset2_2
abcde 2 模糊 abc cde
bad man 2 模糊的 bad bad man a
大爆炸 0
奇怪的 1 模糊的陌生人
每天 0
正好 0
如您所见,新变量 FM_dataset2_ 1和 FM_dataset2_ 2是基于一个计数器 cnt 自动重新分配的变量。但我只是想不出使用 SAS 代码实现这一步的正确方法。
此外,我需要将数据集输出到 xml 文件中。结果应如下所示
<text>abcde</text>
<match>Fuzzy</match>
<matchitem>abc</matchitem>
<matchitem>tecde</matchitem>
和上面的问题一样,问题也是关于如何确定matchitem元素的数量并写入文件。在 xml 地图文件中,我可以如下确定位置
<COLUMN name="FM_dataset2_1">
<PATH syntax="XPath">/../matchitem[position()=**1**]</PATH>
...
<COLUMN name="FM_dataset2_2">
<PATH syntax="XPath">/../matchitem[position()=**2**]</PATH>
但这必须逐案手动完成。是否可以根据 cnt 计数器(maxnum)自动自定义地图文件?
有人可以建议吗?