Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns SAS,用右侧的列值替换缺少的列值_Design Patterns_Sas - Fatal编程技术网

Design patterns SAS,用右侧的列值替换缺少的列值

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 .

我有一个有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 . 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的东西来说都不是什么问题。变量名称比相对位置更有用。:)