楼主: JasonKQiao
2969 3

SAS宏问题,第二步 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
302 个
通用积分
0.1500
学术水平
1 点
热心指数
0 点
信用等级
0 点
经验
1471 点
帖子
93
精华
0
在线时间
59 小时
注册时间
2010-10-3
最后登录
2023-5-7

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
感谢之前sas_user同学的解答,万分感谢O(∩_∩)O哈!
现在想更加specific一点……O(∩_∩)O~
想使用SAS宏做如下的工作:
  对一个文件夹下的所有数据集,进行变量重命名(rename)排序(retain)删除重复观测和一些特定的观测
  之后用set把它们合并起来
具体:
  将变量重命名为不同的名称(不是var#,原来变量名忘记了,⊙﹏⊙b汗,快要拿到数据了,先准备好),变为Stock_code Tprice Trade_Volume Amount Volume Bprice_1
Bprice_2 Bprice_3 Bprice_4 Bprice_5 Bsize_1 Bsize_2 Bsize_3 Bsize_4 Bsize_5 Aprice_1 Aprice_2 Aprice_3 Aprice_ 4 Aprice_5 Asize_1 Asize_2 Asize_3 Asize_4 Asize_5 Buysell_id;
  删除 异常值,比如 Bprice_#<=0 Aprice_#<=0 Bsize_#<=0 Asize_#<=0 Tprice<=0 Volume<=0
  删除重复值
  改变变量顺序 retain~
  用set把它们合并起来
  以下是鄙人根据sas_user同学的程序,自己根据情况改编了一下,希望大家指点,看看鄙人的程序哪些错误哈
%macro reset(lib=);
proc contents data=&lib._all_ out=sasuser.list;
run;
proc contents data=sasuser.list varnum; run;
proc sql;
select distinct memname into : ds separated by ' ' from sasuser.list;
select max(varnum) into : varnum separated by ' ' from sasuser.list group by memname;
quit;
%let number=1;
%do %while (%scan(&ds,&number) ne );
%let dataset=%scan(&ds,&number);
proc sort data=&dataset out=&dataset nodup; /*鄙人理解的是剔除完全重复变量*/
by _all_;
quit;
%let vn=%scan(&varnum,&number);
%do i=1 %to &vn;
proc sql;
select name into : name from sasuser.list where memname="&dataset" and varnum=&i;
quit;
proc datasets library=&lib;
modify &dataset;
rename &name=var&i;/*这里面,我想直接重命名,可以不用这种方法,即把所有的变量原来的名称改成Stock_code Tprice Trade_Volume Amount Volume Bprice_1
Bprice_2 Bprice_3 Bprice_4 Bprice_5 Bsize_1 Bsize_2 Bsize_3 Bsize_4 Bsize_5 Aprice_1 Aprice_2 Aprice_3 Aprice_ 4 Aprice_5 Asize_1 Asize_2 Asize_3 Asize_4 Asize_5 Buysell_id*/
retain Stock_code Tprice Trade_Volume Amount Volume Bprice_1
Bprice_2 Bprice_3 Bprice_4 Bprice_5 Bsize_1 Bsize_2 Bsize_3 Bsize_4 Bsize_5 Aprice_1 Aprice_2 Aprice_3 Aprice_ 4 Aprice_5 Asize_1 Asize_2 Asize_3 Asize_4 Asize_5 Buysell_id; /*再进行重排序*/
do i=1 to 5; /*再进行剔除错误值的工作~*/
if Bprice_i<=0 delete;
if Aprice_i<=0 delete;
if Bsize_i<=0  delete;
if Asize_i<=0  delete;
if Tprice<=0  delete;
if Volume<=0 delete;
quit;
%end;
%let number=%eval(&number+1);
%end;
data combine;
set %do i=1 %to &setnum;/*鄙人想利用setnum作为文件夹的数据集数量,不知道如何使用SAS来测算。如果没有的话,就自己数出一个数字了…………,但是还是希望使用宏O(∩_∩)O哈!*/
%end;
run;
%mend;
%reset (lib=WORK);
二维码

扫码加我 拉你入群

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

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

关键词:SAS宏 Specific volume amount rename 程序 SAS 批量处理

沙发
sas_user 发表于 2011-6-4 06:47:04 |只看作者 |坛友微信交流群
proc sort data=&dataset out=&dataset nodup; /*鄙人理解的是剔除完全重复变量*/
是删除完全重复的变量, 有条件的删除可以试试set &dataset; %if &var<=0  %then delete...

proc datasets library=&lib;
modify &dataset;
rename &name=var&i;/*这里面,我想直接重命名,可以不用这种方法,即把所有的变量原来的名称改成Stock_code Tprice Trade_Volume Amount Volume Bprice_1
Bprice_2 Bprice_3 Bprice_4 Bprice_5 Bsize_1 Bsize_2 Bsize_3 Bsize_4 Bsize_5 Aprice_1 Aprice_2 Aprice_3 Aprice_ 4 Aprice_5 Asize_1 Asize_2 Asize_3 Asize_4 Asize_5 Buysell_id*/

直接命名可以用 let var=%scan ( &name, &number);  let newname=bsize_&number;
proc sql; select &var as &newname from &dataset; 或者不怕麻烦就全部输入新的变量, select old as new....

以上程序list里边的memname就是数据集的名字, proc sql; select count(memname) from list; 可以知道数据集的个数.

使用道具

藤椅
JasonKQiao 发表于 2011-6-4 09:52:56 |只看作者 |坛友微信交流群
其实我们讨论的全是对于观测的处理~~~~~~~~
鄙人愚钝,还是不太明白
1 用set &dataset; %if &var<=0  %then delete..有条件的删除观测,加到哪个地方呢?
2直接命名可以用 let var=%scan ( &name, &number);  let newname=bsize_&number;
proc sql; select &var as &newname from &dataset; 或者不怕麻烦就全部输入新的变量, select old as new....
还是使用您说的全部输入吧,直接rename即可?
3 proc sql; select count(memname) from list;中如何向set %do i=1 %to &setnum中的setnum赋值呢?
是proc sql; select setnum=count(memname) from list;还是proc sql; select count(memname) from list;setnum=count(memname)呢?
鄙人太笨,抱歉啊
O(∩_∩)O谢谢.

使用道具

板凳
JasonKQiao 发表于 2011-6-4 09:57:25 |只看作者 |坛友微信交流群
再加上一句,鄙人是想将同一个文件夹下的所有数据集纵向合并,
data qiao.all;
set %do i=1 %to 数据集个数;
    qiao.data&i.
        %end;;
run;

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 16:07