我们如何在 sas 数据集中进行条件迭代

发布于 2024-07-13 18:15:57 字数 70 浏览 4 评论 0原文

我们如何在 sas 数据集中进行迭代。 比如我就选择了第一个。 的一个变量。 想要找到特定条件的出现并在满足时设置一个值

How can we do iteration in a sas dataset.
For example I have chosen the first. of a variable.
And want to find the occurence of a particular condition and set a value when it satisfy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤单情人 2024-07-20 18:15:57

SAS 数据步骤具有内置的观测循环。 你不必做任何事情,除非你出于某种原因想要这样做。 例如,以下代码为每个观察生成一个随机数:

data one;
  set sashelp.class;
  rannum = ranuni(0);
run;

如果要循环变量,则可以使用数组。 例如,以下使用随机数初始化变量 var1 到 var10:

data one;
  array vars[1:10] var1-var10;
  do i = 1 to 10;
    vars[i] = ranuni(0);
  end;
run;

第一个。 最后。 当您使用 by 语句设置(排序的)数据时,会自动生成标志。 一个例子:

proc sort data=sashelp.class out=class;
  by age;
run;
data one;
  set class;
  by age;
  first = first.age;
  last = last.age;
run;
/* check */
proc print data=one;
run;
/* on lst
  Obs    Name       Age    first    last

  1    Joyce       11      1        0
  2    Thomas      11      0        1
  3    James       12      1        0
  4    Jane        12      0        0
  5    John        12      0        0
  6    Louise      12      0        0
  7    Robert      12      0        1
  8    Alice       13      1        0
  ...
 18    William     15      0        1
 19    Philip      16      1        1
*/

SAS data step has a built-in loop over observations. You don't have to do any thing, unless you want to, for some reason. For instance, the following generates a random number for each observation:

data one;
  set sashelp.class;
  rannum = ranuni(0);
run;

If you want to loop over variables, then there are arrays. For example, the following initializes variables, var1 to var10, with random numbers:

data one;
  array vars[1:10] var1-var10;
  do i = 1 to 10;
    vars[i] = ranuni(0);
  end;
run;

The first. and last. flags are automatically generated when you set a (sorted) data with a by statement. An example:

proc sort data=sashelp.class out=class;
  by age;
run;
data one;
  set class;
  by age;
  first = first.age;
  last = last.age;
run;
/* check */
proc print data=one;
run;
/* on lst
  Obs    Name       Age    first    last

  1    Joyce       11      1        0
  2    Thomas      11      0        1
  3    James       12      1        0
  4    Jane        12      0        0
  5    John        12      0        0
  6    Louise      12      0        0
  7    Robert      12      0        1
  8    Alice       13      1        0
  ...
 18    William     15      0        1
 19    Philip      16      1        1
*/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文