2023年8月3日发(作者:)

sas数据操作update、modifybyke=、控制modify的更新、dataset。。。update语句UPDATE master-data-set<(data-set-options)> transaction-data-set<(data-set-options)>

;

BY by-variable;TIPS:1:后⾯只能跟两个数据集,且⼀定要和by语句连⽤,这个by语句给出了主数据集和更新数据集共同变量的名字。2:update语句中使⽤的数据集必须实现按照by语句制定的变量进⾏排序,或者已经有合适的索引3:对更新数据集存在缺失值的处理通过开关选项UPDATEMODE实现MISSINGCHECK:检查更新数据集,若有缺失值,则保留主数据及中相应的数据NOMISSINGCHECK:不检查更新数据集,若有缺失值,则将主数据集中的相应数据更新为缺失值4:update能做到的merge都能做到,除了对更新数据及缺失值的处理。5:master数据集中的by组变量必须为unique,如果有重复只会对第⼀个进⾏更新,如果transaction中的数据有重复,则会⽤by group的最后⼀个队master数据集中的进⾏更新。

modify语句

2.1:更改数据集中所有观测⾏的值DATA SAS-data-set;  MODIFY SAS-data-set; /*数据集名字要⼀样*/  existing-variable = expression;/*run前⼀步的默认操作不是output是replace*/RUN;⽐较modify与sql中update的效率因为modify数据时不会进⾏数据的拷贝,所以这个地⽅可以有⼀定的加速data test; set ;run;/*在我机器上modify⽐update普遍快0.3秒,这⾥有三⼗⼏万⾏的数据*/proc sql; update test set x=x+1000;quit;

data test; modify test; x = x-1000;run;

2.2:利⽤transaction data更⾏master data 更新by组中与master对应的观测⾏的数据,运⾏时程序内部会⾃动⽣成⼀个dynamic where查询语句DATA SAS-data-set; MODIFY SAS-data-set transaction-data-set UPDATEMODE=MISSINGCHECK | NOMISSINGCHECK; BY key-variable;RUN;MISSINGCHECK 阻⽌缺失值更新主数据集NOMISSINGCHECK opposite way

对于带重复值的情况sas怎么处理?如果是master带重复值,则只会更新重复值的第⼀条如果是transaction带重复值,则会⽤transaction by组中的最后⼀条更新master的数据如果都带重复值、、、那更新还有啥意思、、、、对于transaction有缺失值的情况sas怎么处理?不会⽤缺失值更新,除⾮该缺失值使⽤missing规定的特殊缺失值

2.3:利⽤索引更新数据集和by⼀样,缺失值不会⾃动覆盖data cargo99; set um (rename = (capcargo = newCapCargo cargowgt = newCargoWgt cargorev = newCargoRev)); modify cargo99 key=flghtdte; capcargo = newcapcargo; cargowgt = newcargowgt; cargorev = newcargorev;run;

/*car99是要更新的数据集,set是transaction数据集*/如果是master带重复值,则只会更新重复值的第⼀条如果是transaction带重复值且重复值不连续,则会⽤transaction by组中的最后⼀条更新master的数据如果连续,则会进⾏按位置的11对应,然后在log中报错。可以⽤unique选项来抑制错误(⽤unique后得到的结果和⾮连续的⼀样!)如果都带重复值、、、那更新还有啥意思、、、、

3:控制modify 的 update process3.1:modify的更新是根据你⾃⼰规定的条件来进⾏,并进⾏默认的replace我们可以⽤ output replace remove 来对输出进⾏控制

3.2:I/O错误监控modify的by和key=形式都不输⼊顺序读取,所以不能保证数据结合的正确性,这时很必要进⾏错误检查⾃动变量_iorc_是在modify的by和key=的形势下才产⽣的根据_iorc_的不同形式来进⾏不同的输出操作IF_IORC_=%SYSRC(mnemonic) data master;set transaction;modify master key = id; if _IORC_=%sysrc(_sok) then do; a = b; replace; end; else if _IORC_=%sysrc(_dsenom) then do; output; _ERROR_ = 0; end;run;

4:约束条件4.1:添加约束条件在建表的同时建⽴约束条件必须使⽤proc sql使⽤proc datasets在已存在的数据集上建⽴约束条件对于unique和primary key选项,sas会⾃动建⽴索引当拷贝数据集时,⼤部分的操作都会拷贝相应的限制条件proc datasets nolist;modify capinfo; ic create PKIDInfo=primary key(routeid) message='You must supply a Route ID Number'; ic create Class1=check(where=(cap1st

4.2:查看约束条件proc contents data=xxx;

proc datasets lib=libref;contents data=;quit;

4.3:删除约束条件proc datasets; modify capinfo; ic delete pkidinfo; ic delete class1;quit;

5:追踪观测值的变动when you may want to track the changes that you make by using an audit trail(添加,删除,或者更改等等)An audit trail is an optional SAS file that logs modifications to a SAS table5.1:创建audit

proc datasets nolist; audit capinfo; initiate;quit;5.2:读取aduit⽂件To refer to the audit trail file, use the TYPE= data set contents data= (type=audit);run;proc print data=capinfo (type=audit);run;

5.3:操作aduit trail⽂件该类⽂件包含三类变量

2023年8月3日发(作者:)

sas数据操作update、modifybyke=、控制modify的更新、dataset。。。update语句UPDATE master-data-set<(data-set-options)> transaction-data-set<(data-set-options)>

;

BY by-variable;TIPS:1:后⾯只能跟两个数据集,且⼀定要和by语句连⽤,这个by语句给出了主数据集和更新数据集共同变量的名字。2:update语句中使⽤的数据集必须实现按照by语句制定的变量进⾏排序,或者已经有合适的索引3:对更新数据集存在缺失值的处理通过开关选项UPDATEMODE实现MISSINGCHECK:检查更新数据集,若有缺失值,则保留主数据及中相应的数据NOMISSINGCHECK:不检查更新数据集,若有缺失值,则将主数据集中的相应数据更新为缺失值4:update能做到的merge都能做到,除了对更新数据及缺失值的处理。5:master数据集中的by组变量必须为unique,如果有重复只会对第⼀个进⾏更新,如果transaction中的数据有重复,则会⽤by group的最后⼀个队master数据集中的进⾏更新。

modify语句

2.1:更改数据集中所有观测⾏的值DATA SAS-data-set;  MODIFY SAS-data-set; /*数据集名字要⼀样*/  existing-variable = expression;/*run前⼀步的默认操作不是output是replace*/RUN;⽐较modify与sql中update的效率因为modify数据时不会进⾏数据的拷贝,所以这个地⽅可以有⼀定的加速data test; set ;run;/*在我机器上modify⽐update普遍快0.3秒,这⾥有三⼗⼏万⾏的数据*/proc sql; update test set x=x+1000;quit;

data test; modify test; x = x-1000;run;

2.2:利⽤transaction data更⾏master data 更新by组中与master对应的观测⾏的数据,运⾏时程序内部会⾃动⽣成⼀个dynamic where查询语句DATA SAS-data-set; MODIFY SAS-data-set transaction-data-set UPDATEMODE=MISSINGCHECK | NOMISSINGCHECK; BY key-variable;RUN;MISSINGCHECK 阻⽌缺失值更新主数据集NOMISSINGCHECK opposite way

对于带重复值的情况sas怎么处理?如果是master带重复值,则只会更新重复值的第⼀条如果是transaction带重复值,则会⽤transaction by组中的最后⼀条更新master的数据如果都带重复值、、、那更新还有啥意思、、、、对于transaction有缺失值的情况sas怎么处理?不会⽤缺失值更新,除⾮该缺失值使⽤missing规定的特殊缺失值

2.3:利⽤索引更新数据集和by⼀样,缺失值不会⾃动覆盖data cargo99; set um (rename = (capcargo = newCapCargo cargowgt = newCargoWgt cargorev = newCargoRev)); modify cargo99 key=flghtdte; capcargo = newcapcargo; cargowgt = newcargowgt; cargorev = newcargorev;run;

/*car99是要更新的数据集,set是transaction数据集*/如果是master带重复值,则只会更新重复值的第⼀条如果是transaction带重复值且重复值不连续,则会⽤transaction by组中的最后⼀条更新master的数据如果连续,则会进⾏按位置的11对应,然后在log中报错。可以⽤unique选项来抑制错误(⽤unique后得到的结果和⾮连续的⼀样!)如果都带重复值、、、那更新还有啥意思、、、、

3:控制modify 的 update process3.1:modify的更新是根据你⾃⼰规定的条件来进⾏,并进⾏默认的replace我们可以⽤ output replace remove 来对输出进⾏控制

3.2:I/O错误监控modify的by和key=形式都不输⼊顺序读取,所以不能保证数据结合的正确性,这时很必要进⾏错误检查⾃动变量_iorc_是在modify的by和key=的形势下才产⽣的根据_iorc_的不同形式来进⾏不同的输出操作IF_IORC_=%SYSRC(mnemonic) data master;set transaction;modify master key = id; if _IORC_=%sysrc(_sok) then do; a = b; replace; end; else if _IORC_=%sysrc(_dsenom) then do; output; _ERROR_ = 0; end;run;

4:约束条件4.1:添加约束条件在建表的同时建⽴约束条件必须使⽤proc sql使⽤proc datasets在已存在的数据集上建⽴约束条件对于unique和primary key选项,sas会⾃动建⽴索引当拷贝数据集时,⼤部分的操作都会拷贝相应的限制条件proc datasets nolist;modify capinfo; ic create PKIDInfo=primary key(routeid) message='You must supply a Route ID Number'; ic create Class1=check(where=(cap1st

4.2:查看约束条件proc contents data=xxx;

proc datasets lib=libref;contents data=;quit;

4.3:删除约束条件proc datasets; modify capinfo; ic delete pkidinfo; ic delete class1;quit;

5:追踪观测值的变动when you may want to track the changes that you make by using an audit trail(添加,删除,或者更改等等)An audit trail is an optional SAS file that logs modifications to a SAS table5.1:创建audit

proc datasets nolist; audit capinfo; initiate;quit;5.2:读取aduit⽂件To refer to the audit trail file, use the TYPE= data set contents data= (type=audit);run;proc print data=capinfo (type=audit);run;

5.3:操作aduit trail⽂件该类⽂件包含三类变量