SAS 中的多个 do 循环

MLPNPC

我有一个 2017 年到 2018 年每周收入百分比的数据集。有些人在 2017 年初没有数据,因为他们直到后来才开始赚钱。这些周编号为 201701、201702 - 201752 和 201801 - 201852。

我想要做的是有 104 个新变量,称为 WEEK0 - WEEK103,其中 WEEK0 将具有获得的金钱列的第一个非空列值。下面是一个数据示例:

MON_EARN_201701      MON_EARN_201702      MON_EARN_201703    MON_EARN_201704
     30                     21                  50                 65   
     .                       .                  30                 100   
     .                      102                 95                 85    

然后我希望我的数据具有以下列(示例)

WEEK0      WEEK1      WEEK2      WEEK3
  30         21         50         65
  30        100          .          .
  102        95         85          .

这些只是一个非常大的数据集的小例子。

我在想我需要尝试做一些 do 循环,所以到目前为止我尝试过的是:

DATA want;
SET have;
ARRAY mon_earn{104} mon_earn_201701 - mon_earn_201752 mon_earn_201801 -mon_earn_201852;
ARRAY WEEK {104} WEEK0 - WEEK103;
DO i = 1 to 104;
IF mon_earn{i} NE . THEN;
WEEK{i} = mon_earn{i};
END;
END;
RUN;

这不起作用,因为当第一个值为空时它不会填充 WEEK0。

如果需要更多信息,请发表评论,我会添加进来。

汤姆

听起来你只需要找到复制的起点。

首先按日历月查看收入列表,直到找到第一个非缺失值。然后将从那里开始的值按相对月份复制到新的收入数组中。

data want;
  set have;
  array mon_earn mon_earn_201701 -- mon_earn_201852;
  array week (104);
  do i = 1 to dim(mon_earn) until(found);
    if mon_earn{i} ne . then found=1;
  end;
  do j=1 to dim(week) while (i+j<dim(mon_earn));
    week(j) = mon_earn(i+j-1);
  end;
run;

注意:我简化了 ARRAY 定义。对于输入数组,我假设变量是按顺序定义的,以便您可以使用位置数组列表。对于 WEEK 数组 SAS,我和我都喜欢从 1 开始计数,而不是从 0 开始。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SAS中宏的do循环中的步长

来自分类Dev

如何在 SAS 中做“DO 循环”

来自分类Dev

SAS Do Whitlock循环

来自分类Dev

SAS DO 循环与宏

来自分类Dev

SAS%DO循环以检索多个数据集

来自分类Dev

SAS%DO循环以检索多个数据集

来自分类Dev

SAS:如何从 %DO 循环保存多个 ODS 输出

来自分类Dev

如何使用SAS / IML中的do循环制作多个数据集?

来自分类Dev

数据步骤中的SAS阵列DO循环计算

来自分类Dev

使用数组和do循环条件化SAS中的语句

来自分类Dev

使用数组和do循环条件化SAS中的语句

来自分类Dev

SAS 宏 Do 循环问题

来自分类Dev

循环访问SAS中的库

来自分类Dev

SAS 宏中的循环数组

来自分类Dev

通过 SAS 中的循环生成多个滞后?

来自分类Dev

显示我错误的%DO循环为SAS

来自分类Dev

sas创建带有do循环的变量

来自分类Dev

sas中的随机数生成和两个DO .... END循环

来自分类Dev

宏执行循环直到在sas中

来自分类Dev

在SAS中的宏内编写循环

来自分类Dev

在SAS SQL中循环创建列

来自分类Dev

在SAS中循环执行以下filevar选项

来自分类Dev

使用循环在 SAS 中输入数据

来自分类Dev

SAS:通过proc导入提高do循环的速度

来自分类Dev

使用do循环对Sas重命名变量,如果满足条件

来自分类Dev

SAS是否可以在MACRO的do循环中不使用“ TO”?

来自分类Dev

使用do循环对Sas重命名变量,如果满足条件

来自分类Dev

在SAS的DO循环中使用宏变量时出错:在表达式中找不到所需的运算符

来自分类Dev

宏在ods中损坏的SAS中的列上循环