Design patterns SAS,用右侧的列值替换缺少的列值
我有一个有100列的数据集。每次它都会丢失某些列的一些值(丢失整个列的值)。位置是固定的,因此我无法通过columnA=ColumnB指定它们 我想做的是用右侧列中的列值替换整个缺少的列值(请参见测试数据)。多谢各位Design patterns SAS,用右侧的列值替换缺少的列值,design-patterns,sas,Design Patterns,Sas,我有一个有100列的数据集。每次它都会丢失某些列的一些值(丢失整个列的值)。位置是固定的,因此我无法通过columnA=ColumnB指定它们 我想做的是用右侧列中的列值替换整个缺少的列值(请参见测试数据)。多谢各位 DATA have ; LENGTH make $ 20 ; INPUT make $ 1-17 a b c d m h u; CARDS; AMC Concord 4099 22 . 2 1 . 22 AMC Pacer 4749 17 .
DATA have ;
LENGTH make $ 20 ;
INPUT make $ 1-17 a b c d m h u;
CARDS;
AMC Concord 4099 22 . 2 1 . 22
AMC Pacer 4749 17 . 2 1 . 17
Audi 5000 9690 17 . 3 23 . 17
Audi Fox 6295 23 . 1 32 . 23
;
RUN;
DATA want;
LENGTH make $ 20 ;
INPUT make $ 1-17 a b c d m h u;
CARDS;
AMC Concord 4099 22 2 2 1 22 22
AMC Pacer 4749 17 2 2 1 17 17
Audi 5000 9690 17 3 3 23 17 17
Audi Fox 6295 23 1 1 32 23 23;
RUN;
假设您不能在缺少整个列的情况下丢失:
data want;
set have;
array vars(*) a -- u;
do i = 1 to dim(vars)-1;
if vars(i) = . then vars(i)=vars(i+1);
end;
run;
假设您不能在缺少整个列的情况下丢失:
data want;
set have;
array vars(*) a -- u;
do i = 1 to dim(vars)-1;
if vars(i) = . then vars(i)=vars(i+1);
end;
run;
你所说的“位置是固定的”是什么意思?您是否需要在不知道列名的情况下使用此功能?如果两个或多个连续列缺少值,您想怎么做?是否每次缺少值时都要用“next”变量(下一个是position/varnum)的值替换它?所有变量都是数字的吗,如您的示例所示?如果是这样,您可以使用数组。但这是一个奇怪的要求。我想不出什么时候两个变量的值完全相同是有用的。667489-这意味着这次34列缺少值,下次76列缺少值。如果缺少两个或更多连续的列,…我们目前没有遇到这种情况,因此我不知道答案。希望到时候我可以修改这里提供的示例代码。Quentin-我所有的值都是数字。这是一个奇怪的要求。你说得对。请求来自业务方面。您所说的“位置固定”是什么意思?您是否需要在不知道列名的情况下使用此功能?如果两个或多个连续列缺少值,您想怎么做?是否每次缺少值时都要用“next”变量(下一个是position/varnum)的值替换它?所有变量都是数字的吗,如您的示例所示?如果是这样,您可以使用数组。但这是一个奇怪的要求。我想不出什么时候两个变量的值完全相同是有用的。667489-这意味着这次34列缺少值,下次76列缺少值。如果缺少两个或更多连续的列,…我们目前没有遇到这种情况,因此我不知道答案。希望到时候我可以修改这里提供的示例代码。Quentin-我所有的值都是数字。这是一个奇怪的要求。你说得对。请求来自业务端。同意该方法,但这是用左边的变量“vars(i-1)”替换缺少的值。OP希望变量位于右边,“vars(i+1)”。如果知道我也必须进行空间感知,你会感到震惊吗?我想这对大多数SAS的东西来说都不是什么问题。变量名称比相对位置更有用。:)同意这种方法,但这是用左边的变量“vars(i-1)”替换缺少的值。OP希望变量位于右边,“vars(i+1)”。如果知道我也必须进行空间感知,你会感到震惊吗?我想这对大多数SAS的东西来说都不是什么问题。变量名称比相对位置更有用。:)