更新最后不是空白记录SAS

时间:2017-12-20 15:41:45

标签: sas

我有以下数据集。

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,但我需要选择最后一个非空记录

2 个答案:

答案 0 :(得分:3)

看起来你想要每个非关键变量的最后一个非缺失值。因此,您可以让 driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()) .scrollIntoView(new UiSelector().text(\"Radio Group\"));")); 语句为您完成工作。通常,对于更新操作,您可以将事务应用于主数据集。但是对于您的应用程序,您可以使用UPDATE数据集选项使您当前的数据集同时作为主数据库和事务处理。

OBS=0

答案 1 :(得分:0)

的Riccardo:

有很多方法可以在每个组中选择每列的最后一个非缺失值。这有三种方式。我不会说一个是最好的方法,每种方法都有它的优点,具体取决于具体的数据集,编码器的舒适度和长期可维护性。

方式1 - 更新语句

也许最简单的编码方法是这样的:

  • 创建一个数据集,每个ID包含一行,与原始数据包含相同的列。
  • 使用comment语句将每个命名变量替换为非缺失值。

示例:

UPDATE

方式2 - DOW循环

其他人将涉及阵列和第一。最后。标记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.将值(在组内跟踪)复制到输出列中。

方式3 - 合并列切片

last.