我也在 RunSubmit 上问过这个问题,因为 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,而不是关于 [and first time],只是添加了它,因此它不会生成无限循环。*
附加信息:
由于似乎仍然不是 100% 清楚我想要做什么,我在原始样本数据集和示例中添加了一些内容。请记住,它应该有点通用,而不是固定代码。以后情况可能会有所不同。但主要问题只是:“当你在 obs=Y 时,是否有可能回到 obs=X 并从那里去?如何?”
背景信息:这适合使用包含 xml 流的单个表创建 xml 输出的整个故事,其中一些元素需要重复。不,由于旧 SAS 版本,无法使用 XML 映射。不,ODS 也不适用于这种情况。顺便说一句,这只是背景信息,因为“我仍然不知道你想做什么”的评论不断出现;)
不适用于我的需要的可能性列表:
- REWIND 函数(仅返回第一次观察)
- LAG 函数(获取变量的先前值,而不是返回 obs)
- 使用多个 SET 语句:这不是我需要的通用方式(即,一些数据集需要 2 个循环,其他数据集需要 5 个循环,因此 5 个嵌套的 SET 语句......)
什么可以工作:
- 使用完整的 SCL 代码执行数据步骤(推迟)
- SET 语句中的 POINT 选项(当前试用)
- 哈希表:仍然需要做更多的研究,因为我对此或如何实现知之甚少。