手机能制作网站吗,医院网站建设方案计划,WordPress建影视站,网站营销外包公司简介本次重点在#xff1a;sas数据集管理 主要包括#xff1a;包括数据集纵向拼接、转置、排序、比较、复制、重命名、删除等 1.append语句 注#xff1a;base数据集和data两个数据集必须结构一样#xff0c;避免使用force的情况#xff0c;重复append的会造成重复。 一个避… 本次重点在sas数据集管理 主要包括包括数据集纵向拼接、转置、排序、比较、复制、重命名、删除等 1.append语句 注base数据集和data两个数据集必须结构一样避免使用force的情况重复append的会造成重复。 一个避免重复的商业化应用 %macro dl; %if %sysfunc(exist(null)) ne 0 %then %do; proc datasets libwork nolist; delete null; quit; %end; proc append basenull datasashelp.class;run; %mend dl; %dl; 如果数据集null存在则进行删除否则直接append 另一个使用的例子; data _null_; xtoday(); format x yymmdd10.; call symput(data_month,put(intnx(month,x,0),yymmn6.)); run; %put data_month; data a; input month$ var; cards; 200908 10 200909 20 200910 30 200911 40 ; data b; input month$ var; cards; 200911 400 ; data a; modify a; if monthdata_month then remove; run; proc append basea datab;run; 第一部分获取当前月 第二部分删除当前月数据 第三部分append到数据a 其中第二部分可以用以下两个语句替代但是效率最高的是remove效率最低的是sql。 data a; set a; if monthdata_month then delete; run; proc sql; delete from a where monthdata_month; quit; 2.sort语句 常用选项 nodupkey删除重复by值对应的观测 noduprecs删除重复观测值 Descending 一定要放在降序排序的变量前。 Eg: data a; input x y ; cards; 1 20 1 10 1 30 2 40 2 50 ; run; proc sort dataa nodupkey; by x;run; 只取排序变量的每一个by组的第一条观测值 上述代码也可以用以下代替 proc sort dataa ; by x;run; data b; set a; by x; if first.x; run; 返回每一个by组里面y最小的 proc sort dataa; by x y;run; proc sort dataa nodupkey; by x;run; 也可以用data步完成 proc sort dataa; by x y;run; data b; set a; by x y; if first.x; run; 注如果使用了nodupkey选项最好使用out选项否则原有数据集会被删除掉一部分。 对于多个字符变量需要sort的情况下sort前先用catt之类的字符拼接函数拼接所有需要sort的字符变量。并最好使用out选项。 data a; length cat $100; input x1$ x2$ x3$ y; catcatt(of x1-x3); cards; a1 b1 c1 1 a2 b2 c2 2 ; run; proc sort dataa outb; by cat; run; 以下代码也可以执行但是效率低 proc sort dataa outb; by x1-x3; run; proc sort dataa ; by x1-x3; run; 3.转置transpose过程 proc transpose data chapt6.score out chapt6.idnumber nametest prefixsn; id studentid; idlabel student; run; 注转置的变量为所有的数值型变量包括test1、test2、final 对于默认的变量名用studentid代替并添加前缀sn 对于默认的转之前变量名列转置后的列名_name_改为test 转置后的变量增加student值 eg proc transpose data chapt6.fishdata out chapt6.fishlength(rename(col1measurement)); var length1-length4; by location date; run; by组中的4个变量length1-length4进行转置系统每读取一条by观测转置后将产生4条观测 data chapt6.fishlength2; set chapt6.fishdata(keeplocation date length1-length4); array tr[1:4] length1-length4; do i1 to 4; measurementtr(i); output; end; keep location date measurement; run; 通过data语句实现上面的转置过程 proc transpose data chapt6.fishlength out chapt6.fishdata2; var measurement; by location date; id _name_; run; 列转成行 data chapt6.fishdata3; do i1 to 4; set chapt6.fishlength(keeplocation date measurement); array tr[1:4] length1-length4; tr(i)measurement; end; keep location date length1-length4; run; 通过data步骤实现列转成行 4.datasets过程 见sashelp