- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据集,我想从中抽取一个样本进行替换。当我使用 proc surveyselect
时,抽取的样本与原始数据集中的顺序完全相同,并且多次抽取被写在彼此下面。
proc surveyselect data=sashelp.baseball outhits method=urs n=1000 out=mydata;
但是,对我来说重要的是,表格中的位置也被抽样了。 proc surveyselect
中是否有一个选项,或者我最好自己对行号进行采样并输出它,如 this paper 中所述,p4?
作为玩具示例(不是 SAS 表示法),假设我有一个值列表 [a, b, c, d]
并且我重复绘制了五次(并保持顺序平局):
首先是a
,然后是c
,然后是a
,然后是b
,然后是c
。我想要的结果是[a, c, a, b, c]
,但是sas只给出了
[a,a,b,c,c]
(带有 outhits
)[a 2, b 1, c 2, d 0]
(使用 outall
)或 [a 2, b 1, c 2]
(没有附加选项)。最佳答案
这是一个只需要 BASE SAS 的解决方案。需要进行微小的更改以允许包含其他列,例如 ID 或 DATE。我不认为这是最有效的方法。它在很大程度上依赖于 PROC SQL
,这是我的偏好。话虽如此,它应该会在相当合理的时间内产生您希望的结果。
生成的 SQL 代码的长度证明需要一个单独的 sas 程序。如果您不想在日志中显示整个 %included
文件,只需省略 /source2
选项即可。
data mymatrix;
input c1 c2 c3 c4 c5;
datalines;
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
31 32 33 34 35
36 37 38 39 40
;
参数:
lib
= ds 所在的库
ds
= 从中采样的表
out
= 要生成的表
outfile
= 包含插入字符串的 sas 程序的路径/名称
n
= 重复次数
%macro DrawSample(lib, ds, out, outfile, n);
%local nrows ncols cols;
proc sql;
/* get number of rows in source table */
select count(*)
into :nrows
from &lib..&ds;
/* get variable names */
select name, count(name)
into :cols separated by " ",
:ncols
from dictionary.columns
where libname = upcase("&lib")
and memname = upcase("&ds");
quit;
data _null_;
file "&outfile";
length query $ 256;
array column(&ncols) $32;
put "PROC SQL;";
put " /* create an empty table with same structure */";
put " create table &out as";
put " select *";
put " from &lib..&ds";
put " where 1 = 2;";
put " ";
do i = 1 to &n;
%* Randomize column order;
do j = 1 to &ncols;
column(j) = scan("&cols", 1 + floor((&ncols)*rand("uniform")));
end;
%* Build the query;
query = cat(" INSERT INTO &out SELECT ", column(1));
do j = 2 to &ncols;
query = catx(", ", query, column(j));
end;
rownumber = 1 + floor(&nrows * rand("uniform"));
query = catx(" ", query, "FROM &lib..&ds(firstobs=", rownumber,
"obs=", rownumber, ");");
put query;
end;
put "QUIT;";
run;
%include "&outfile" / source2;
%mend;
%DrawSample(lib=work, ds=mymatrix, out=matrixSample, outfile=myRandomSample.sas, n=1000);
瞧瞧!
关于sas - SAS中有放回的随机有序抽样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319371/
我有一个问题,我在我的 C++ 程序中错误的时间得到一个 int 作为输入,所以我需要稍后在 cin 上“放回”。然而,我能找到的最接近于执行此操作的是 istream 的推回功能。遗憾的是,这仅适用
当工具栏被拖离 GUI 然后关闭(将其返回到 GUI)时,为什么这段代码会抛出 IllegalArgumentException? 我能理解为什么在没有约束的情况下添加组件可能是不合适的,但在这种情况
我是一名优秀的程序员,十分优秀!