楼主: changgz
5246 2

[学习分享] sql与宏批量处理某些类型变量 [推广有奖]

  • 2关注
  • 27粉丝

讲师版主

已卖:40份资源

讲师

13%

还不是VIP/贵宾

-

威望
0
论坛币
749999 个
通用积分
15.3027
学术水平
59 点
热心指数
57 点
信用等级
50 点
经验
3913 点
帖子
122
精华
2
在线时间
417 小时
注册时间
2013-10-28
最后登录
2025-8-10

楼主
changgz 发表于 2014-3-11 14:24:48 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
大家在工作学习中或许会遇到批量处理表或某一类变量的操作。这用到了创建宏的一些方法,Data步和SQL步有都提供了一下创建和修改宏变量的方法或例程,以下只是一个简单的示例,用于批量处理一个表中的一类变量,在每个都作描述性统计的同时,用盖帽法处理异常值(上下1%被认为是极端值)。
需要说明的如下:
&SQLOBS是每次执行SQL过程自动生成的宏变量,存放了返回的行数;
into :name1-:name&Rows用于在SQL步中创建连续宏变量数组,用于后面的宏循环体内;
sashelp.vcolumn是SAS维护的数据字典的视图,里面存放了所有表的信息;
以下是完整的程序示例:
/*本程序在work逻辑库下生成一张同名的剔除原表中所有的数值型连续变量的极端值*/

%let lib=sashelp;/*输入逻辑库*/
%let table=CITIQTR;/*输入表名*/
/**/
data &table;
set &lib..&table;
run;

%macro vr(v);
proc means data=&table n nmiss mean median mode min p1 p99 max std skewness ;
var &v.;
output out=var p1=p1 p99=p99;
run;
data _null_;
set var end=last;
call symputx('min',p1);
call symputx('max',p99);
run;
data &table;
set &table;
if &v.>=&max. then &v.=&max.;
if &v.<=&min. then &v.=&min.;
run;
%mend vr;


proc sql;
select name from sashelp.vcolumn
where libname="&lib" and type='num' and memname="&table";
%let Rows=&SQLOBS;
select name
into :name1-:name&Rows
from sashelp.vcolumn
where libname="&lib" and type='num' and memname="&table";
quit;

%Macro WINSORIZE;
%do i=1 %to &Rows;
%vr(&&name&i);
%end;
%mend WINSORIZE;
%WINSORIZE

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:批量处理 sql skewness SASHELP VCOLUMN 程序 风格 统计 信息

沙发
可~乐 发表于 2014-3-11 20:37:30
看看。。。

藤椅
just31415 发表于 2014-3-11 23:47:35
感谢~~
https://app.yinxiang.com/referral/Registration.action?sig=2d

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 15:42