我的数据集XXX包含记录,其中2行基于FRUIT列的相同值形成一对。不同之处在于,一行包含空的COUNTRY值字段,而第二行包含实际的COUNTRY值。类似地,第一行包含空的COLOR字段,而第二行包含实际的COLOR值。现在我想填充填充了COUNTRY值的row(source)的COLOR值到第一行的COUNTRY字段为空的空COLOR字段(destination)。
<a href=“test.html”>
<div>
<img src=“img.jpg” alt=“test”/>
<p>Link Test</p>
</div>
</a>
当然这个例子很愚蠢,但它是有效的商业案例。
道歉我在这里无法附加代码,因为我现在在公共汽车上疯狂打字。我先尝试过使用。最后。 ,但不知何故,变量不能跨行传递。
你可以在这提出建议吗?
答案 0 :(得分:0)
这是执行此操作的一种方法,使用retain
来保留先前行的值。诀窍是保留一个临时列而不是你要填写的列:
data have;
input FRUIT $ COUNTRY $ COLOUR $;
infile cards dlm='|';
cards;
Banana | . | .
Banana | Spain | Yellow
Apple | . | .
Apple | USA | Red
Pear | China | Green
Pear | . | .
;
run;
/*Sort missing values of COLOUR to the bottom within each FRUIT*/
proc sort data = have out = temp;
by FRUIT descending COLOUR;
run;
data want;
set temp;
by FRUIT;
retain t_COLOUR 'placeholder';
if first.FRUIT then do;
t_COLOUR = .;
if not(missing(COUNTRY)) then t_COLOUR = COLOUR;
end;
else COLOUR = coalescec(COLOUR, t_COLOUR);
drop t_COLOUR;
run;
答案 1 :(得分:0)
试试这个:
proc sort data=have;
by fruit country;
run;
data want( rename=(country1=country colour1=colour));
set have end=eof;
by fruit notsorted;
if first.fruit then do;
point = _N_ + 1;
set have (keep= country colour rename= (country = country1 colour = colour1)) point=point;
end;
else do;
country1=country;
colour1 = colour;
end;
drop country colour;
run;
答案 2 :(得分:0)
因此,您希望将COLOUR
的非缺失值应用于具有相同值FRUIT
的每条记录?听起来像一个简单的MERGE问题。
data YYY;
merge XXX(drop=colour) XXX(keep=fruit colour where=(not missing(colour)));
by fruit;
run;