首页 > 解决方案 > SAS 从另一个数据集中选择随机交易日期

问题描述

我正在尝试向名为“new1”的数据集添加一个“伪日期”列。“伪日期”列将随机选择 01JAN2002 和 31DEC2018 之间的交易日期。以下代码运行良好。在“伪日期”中不需要周末,但它仍然增加了非交易日。我只想要交易日期。事实上,我创建了另一个只有交易日期的数据集。如何编写一个 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;

标签: sasrandom-seed

解决方案


  1. 在您的主数据集中创建一个随机数,它是介于 1 和交易日天数之间的整数。
  2. 在交易日数据中添加记录号
  3. 根据 1 和 2 中的数字连接数据

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

算出 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;

推荐阅读