【问题标题】:Create 100 copies of a dataset in SAS在 SAS 中创建 100 个数据集副本
【发布时间】:2014-10-14 00:33:11
【问题描述】:

我需要创建 100 个数据集副本(其中有 3 个变量),但其中一个变量需要随机分配(1 到 1000)

我知道我可以使用 100 条数据语句,但我不想走那条路!

假设我有数据集 A,想创建数据集 A1 到 A100,我使用了以下代码;

data A1--A100;
    set A;
    do i=1 to 1000;
    var3=int(ranuni(0) * 1000 + 1);
    output A1--A1000;
    end;
run;

但 SAS 根本不生成任何东西

【问题讨论】:

  • 我确信它会在您的日志中生成错误。
  • 您可能还想查看 Proc SurveySelect 以帮助进行随机选择。我不确定您到底在追求什么,所以不确定它是否有帮助。

标签: sas


【解决方案1】:

你不能通过任何这样的快捷方式来做到这一点。您可以使用宏语言创建 1000 个数据集名称和 1000 个输出语句。

但是,您很可能不应该这样做。相反,拥有一个带有 BY 变量的数据集,然后在您要执行的任何操作(MCMC 或其他)中使用该 BY 变量和 BY 语句。

data want;
  set have;
  do byvar=1 to 1000;
    var3 = int(ranuni(7)*1000+1);
    output;
  end;
run;

另外,不要使用 ranuni(0)。始终使用阳性种子(并保存),这样您就可以复制您的结果。

【讨论】:

  • 谢谢,说清楚;创建数据集“A”的 R=100 个副本,但让变量 VAR 在每个副本中随机排列。我阅读了这 2 个提示,但它没有提供代码;最好的方法是作为单个数据集,其中原始数据的每个副本(VAR 的随机重新排序)都堆叠在一起。一组数字的随机重新排序可以通过随机生成一个变量(RANUNI 函数)并按该变量排序来完成。不建议生成 100 个不同的数据集并将它们堆叠起来;整个最终数据集应仅使用 1 或 2 个数据步骤生成。
【解决方案2】:

这是答案,希望对你有帮助;

    data want;
      set have;
      do dset=1 to 101;
        rand=ranuni(4011120);
        if dset=1 then real=1; else real=0;
        output;
      end;
    run;

proc sort data=want;
  by dset rand;
run;

data want2;
  set permut;
  if real=0 then rank= mod(_N_,366);
  if real then realrank=rank;
run;

proc sort data=want2;
  by dset dayofyear;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2012-06-13
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多