在SAS中创建100个数据集副本

在SAS中创建100个数据集副本,sas,Sas,我需要创建一个数据集的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根本不生成任何东西您不能通过任何这样的

我需要创建一个数据集的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根本不生成任何东西

您不能通过任何这样的快捷方式来实现。可以使用宏语言创建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)。始终使用一个积极的种子(并保存它),这样你就可以复制你的结果。

以下是答案,希望它能有所帮助

    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;

我很有信心它会在你的日志中产生错误。你可能还需要查看Proc SurveySelect来帮助进行随机选择。我不确定你到底想要什么,所以不确定它是否有帮助;创建数据集“A”的R=100个副本,但让变量VAR在每个副本中随机排列。我读了这2条提示,但它没有提供代码;实现这一点的最佳方法是将原始数据的每个副本(随机重新排序VAR)堆叠在一个数据集上。通过随机生成一个变量(Ranui函数)并按该变量排序,可以对一组数字进行随机重新排序。不建议生成100个不同的数据集并将它们堆叠起来;整个最终数据集应仅使用1或2个数据步骤生成。