【问题标题】:SAS, replace missing column values with the column values from rightSAS,用右边的列值替换缺失的列值
【发布时间】:2016-04-13 21:49:10
【问题描述】:

我有一个包含 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;

【问题讨论】:

  • “地点是固定的”是什么意思?您是否需要在不知道列名的情况下工作?如果两个或多个连续列有缺失值,你想怎么办?
  • 是不是每次有一个缺失值你都想用“下一个”变量的值(下一个是位置/varnum)替换它?所有变量都是数字的,就像你的例子一样?如果是这样,您可以使用数组。但这是一个奇怪的要求。我想不出有两个变量具有完全相同的值是有用的。
  • 667489 - 这意味着这一次 col 34 有缺失值,下一次 col 76 有缺失值。如果缺少两个或多个连续列,..我们目前没有遇到这种情况,所以我不知道答案。希望到时候我可以修改这里提供的示例代码。
  • Quentin- 我所有的值都是数字。这是一个奇怪的要求。你是对的。该请求来自业务方面。

标签: design-patterns sas


【解决方案1】:

假设您不能在不丢失整列的情况下丢失:

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; 

【讨论】:

  • 同意方法,但这是用左侧的变量“vars(i-1)”替换缺失值。 OP 想要右边的变量,'vars(i+1)'。
  • 知道我也需要空间感,你会不会感到震惊?
  • 对于大多数 SAS 的东西来说,这不会是个大问题。变量名称比相对位置更有用。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2020-12-03
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
相关资源
最近更新 更多