SAS 从另一个数据集中选择随机交易日期



我正在尝试将"伪日期"列添加到名为"new1"的数据集中。"伪日期"列将随机选择2002年1月1日至2018年12月31日之间的交易日期。以下代码运行良好。它不会在"伪日期"中占用周末,但它仍然增加了非交易日。我只想要交易日期。事实上,我创建了另一个只有交易日期的数据集。如何编写一个 SAS 代码,该代码将从交易日期数据集中随机选择并将其放入"伪日期"列的"new1"数据集中。

提前谢谢。

data new1;
set new;
format pseudodate yymmddn8.;
Begdate= '01JAN2002'd;
enddate= '31DEC2018'd;
do _i=1 to 1000;
pseudodate = begdate + (floor((enddate-begdate) * ranuni(457)));
if weekday(pseudodate) not in (1,7) then leave;
else call missing(pseudodate);
end;
run;
  1. 在您的主数据集中创建一个随机数,该整数介于 1 和交易日的天数之间。
  2. 为交易日数据添加创纪录的数字
  3. 根据 1 和 2 中的数字联接数据

如果您只忽略周末,那么为什么不直接在 x 天之间生成一个随机数,并使用它来使用 intnx 和工作日选项来增加它呢?

计算出 2018 年 12 月至 2002 年 1 月之间的工作日数,并将其用作限制。

完全未经测试:

data want;
set new;
nDays =intck('weekdays', '01Jan2002'd, '31Dec2018'd, 'C');
x  = rand('integer', 1, nDays);
randDate = intnx('weekday', '01Jan2002'd, x);
run;

最新更新