我在RunSubmit上也问过这个问题,因为SAS Q &社区似乎有点分散。如果不理解,请告诉我。SAS:返回到SAS数据步骤中的先前观察?
是否有可能在数据步骤中返回到前一个/某些观察值并从那里进一步通过数据集?
要添加的问题的情况下,它仍然是不明确的,一个小例子:
数据组 'work.test':
name | number
John | 1
Jack | 2
Jane | 3
Jade | 4
Ronn | 5
Dick | 6
Sofy | 7
Sady | 8
Ruth | 9
数据步骤:
Data _null_;
set work.test;
File ...\test.txt;
put name;
if number = 5 and counter=3 then do;
counter = counter+1;
*return to obs where number = 3* AKA *set obs pointer back to obs with nr=3*;
end;
run;
*问题是关于部分返回obs其中number = 1,而不是 [和第一次],即只加这样就不会产生和无限循环*
附加信息:
,因为它似乎还不是100%清楚我想要做的,我加了一下,原来的样本数据设置和例子。只要记住它应该是一个通用的,而不是固定的代码。条件可能稍后会有所不同。但主要问题只是:“是否有可能回到obs = X,并且当你在obs = Y时从那里出发,怎么样?”
背景信息: 这适用于创建一个xml输出的全部过程,它使用一个保存xml流的表,其中一些元素需要重复。不,使用XML映射是不可能的,因为旧的SAS版本。不,在这种情况下,ODS也不适用。顺便说一句,这只是背景资料,因为这句话“我还是不knwo你尝试做”保持上来;)的并不适用于我的需求的可能性
列表:
- 退功能(只返回第一个观察结果)
- 滞后函数(获得变量的前一个值,而不是回到obs中)
- 使用多个SET语句:这在我需要的方式中不是通用的(即一些数据集合需要2个循环,其他需要5个循环,因此5个嵌套SET语句...)
什么可以工作:
- 使用的完整的SCL代码通过数据步骤(推迟)
- 点选项在SET语句中去(目前试行)
- 哈希表:还有做更多的研究,因为我对这个或者如何实施不太了解。
是否[滞后](http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000212547.htm)功能可以帮助您?我不太清楚你想要做什么 - – 2011-05-11 13:57:33
我建议探索[哈希和哈希迭代器对象](http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default /viewer.htm#a003143739.htm),它允许更多地控制您在给定数据集内的位置。 – sasfrog 2011-05-11 22:48:30
@Louisa:我也发现了这个函数,但是它不会真的有帮助,因为它和retain语句有些相似。然后,我需要“滞后”(或者通过太多的观察“保留”太多的值)@sasfrog:我会仔细研究它,但乍一看它并不是我所需要的。 无论如何,谢谢! – Yoh 2011-05-12 11:49:12