我有以下数据集。
ID var1 var2 var3
1 100 200
1 150 300
2 120
2 100 150 200
3 200 150
3 250 300
我想要一个新的数据集,每个变量组只有最后一个非空白记录。
id var1 var2 var3
1 150 200 300
2 100 150 200
3 250 300 150
持续。选择最后一个reord,但我需要选择最后一个非空记录
答案 0 :(得分:3)
看起来你想要每个非关键变量的最后一个非缺失值。因此,您可以让 driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector())
.scrollIntoView(new UiSelector().text(\"Radio Group\"));"));
语句为您完成工作。通常,对于更新操作,您可以将事务应用于主数据集。但是对于您的应用程序,您可以使用UPDATE
数据集选项使您当前的数据集同时作为主数据库和事务处理。
OBS=0
答案 1 :(得分:0)
的Riccardo:
有很多方法可以在每个组中选择每列的最后一个非缺失值。这有三种方式。我不会说一个是最好的方法,每种方法都有它的优点,具体取决于具体的数据集,编码器的舒适度和长期可维护性。
也许最简单的编码方法是这样的:
comment
语句将每个命名变量替换为非缺失值。示例:
UPDATE
其他人将涉及阵列和第一。最后。标记data want_base_table(label="One row per id, original columns");
set have;
by id;
if first.id;
run;
* use have as a transaction data set in the update statement;
data want_by_update;
update want_base_table have;
by id;
run;
组的变量。此示例显示了一个BY
循环,用于跟踪非缺失值,然后将其用于每个DOW
的输出:
ID
当data want_dow;
do until (last.id);
set have;
by id;
array myvar var1-var3 ;
array myhas has1-has3 ;
do _i = 1 to dim(myvar);
if not missing (myvar(_i)) then
myhas(_i) = myvar(_i);
end;
end;
do _i = 1 to dim(myhas);
myvar(_i) = myhas(_i);
end;
output;
drop _i has1-has3;
run;
块内有DOW
语句且循环终止由SET
标志变量触发时,循环通常称为DO; END;
循环。类似的非DOW方法(未显示)将使用隐式循环和last.
来初始化跟踪数组,并使用first.
将值(在组内跟踪)复制到输出列中。
last.