如何在SAS中同时迭代两个集合?

如何在SAS中同时迭代两个集合?,sas,Sas,我试过这样的方法: data wynik; set dane; if x>3 than x3=3*x; else set dane2; x3=x2;set dane; run; dane和dane2具有相同的行数 结果很有趣-设置dane2后,条件x>3仍保持不变,但SAS始终进行第一次观察-也就是说,它不通过隐藏循环计数器的当前状态。问题是,SAS在遍历用户可以访问的数据集时是否具有/使用带计数器的隐藏循环 编辑: 也许我应该添加标题-没有expicit循环,但这也会受到欢迎,做出一些

我试过这样的方法:

data wynik;
set dane;
if x>3 than x3=3*x;
else set dane2; x3=x2;set dane;
run;
dane和dane2具有相同的行数

结果很有趣-设置dane2后,条件
x>3
仍保持不变,但SAS始终进行第一次观察-也就是说,它不通过隐藏循环计数器的当前状态。问题是,SAS在遍历用户可以访问的数据集时是否具有/使用带计数器的隐藏循环

编辑:
也许我应该添加标题-没有expicit循环,但这也会受到欢迎,做出一些假设:

data dane;
do x = 1 to 5;
output;
end;
run;

data dane2;
do x2 = 5 to 1 by -1;
output;
end;
run;

data wynik;
merge dane dane2;
if x > 3 then x3=3*x;
else x3=x2;
put x3=;
run;
它使用并排合并(merge with no by语句)一次获取两个值

要回答您的后续问题:

SAS在遍历用户可以访问的数据集时是否具有/使用带计数器的隐藏循环

是的,是的<代码>\u n定义当前循环迭代(只要它没有被外部修改,它可以被外部修改-它只是一个未写入数据集的常规变量)。因此,您可以类似地执行以下操作:

data wynik;
set dane;
if x > 3 then x3=x*3;
else do;
  set dane2 point=_n_;
  x3=x2;
end;
put x3=;
run;

并行合并是首选,因为它会更快,除非您很少需要查看DANE2。编写代码也更容易。

不用说,这两种方法都存在相同的问题-变量重叠。如果两个数据集之间有任何变量重叠,则需要验证是否得到了预期的结果,或者使用DROP、KEEP、,或者重命名语句以确保发生这种情况。如果其中一个表不是太大,您也可以使用哈希对象并手动对其进行迭代。@Rob Penridge非程序员对sas哈希对象的最佳介绍是什么;我将从本提示表()中给出的示例开始。然后,这两篇文章给出了哈希表()和()灵活性的极好例子。如果您对编码比较熟悉,那么哈希表可能会很神奇,而且它们不像看上去那么可怕!看看你的其他帖子,我想你会没事的。顺便说一句,每当我有一个哈希表数据计算问题时,这个提示表就是我的参考资料。