作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有 2 个数据集 A 和 B:
Data A;
input data $;
datalines;
A1
A2
A3
;
run;
Data B;
input data $;
datalines;
B1
B2
B3
;
run;
我想生成一个具有特定顺序的数据集,如下所示:
A1
B1
B2
B3
A2
B1
B2
B3
A3
B1
B2
B3
如何在没有 POINT= 的情况下通过数据步从数据集 A 和 B 做到这一点?
我试过这个方法:
DATA WRONG_ANSWER;
SET A;
OUTPUT;
DO i = 1 to 3;
SET B;
OUTPUT;
END;
RUN;
结果是:
A1
B1
B2
B3
A2
看起来 B 的文件结束指示器终止了这个数据步骤。
我还用 POINT= 尝试了另一种方法,我得到了正确的结果。然而,由于从 B 访问特定 obs 时的大量 I/O 时间,这种方法非常慢:
DATA WRONG_ANSWER;
SET A;
OUTPUT;
DO i = 1 to 3;
SET B POINT=i; //this is the only different from above
OUTPUT;
END;
RUN;
最佳答案
假设一些事情,最快 的方法可能是散列迭代器解决方案。假设:
鉴于这些假设,这是可行的:
data want;
if 0 then set b;
if _n_=1 then do;
declare hash b_hash(dataset:'b', ordered:'a');
b_hash.defineKey('data');
b_hash.defineData('data');
b_hash.defineDone();
declare hiter b_iter;
b_iter = _new_ hiter('b_hash');
end;
set a;
output;
rc = b_iter.first();
do while (rc=0);
output;
rc = b_iter.next();
end;
run;
根据您的用例,您可能希望通过宏系统和/或 dictionary.columns 查询构造 defineData
调用,以避免对列名进行硬编码。
这比点快多了;与基线相比:
data want_point;
set a;
output;
do _n_ = 1 to nobs_b;
set b point=_n_ nobs=nobs_b;
output;
end;
run;
因此,如果您有一个大型数据集并且要将它与一个小型数据集重复组合,则建议使用 Hash。如果两个数据集的大小相似或重复设置的数据集更大,则点可能与您得到的一样好(假设维护哈希的难度更高)。
关于sas - 如何按一定顺序读取两个数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32136921/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!