全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3812 7
2015-06-17
悬赏 10 个论坛币 已解决
   比如我有一个 数据集。里面有100个变量。其中有40个变量的名字是*_number 。就是以_number结尾的这些变量。
   我想把所有以number结尾的变量  乘以 一个0.8 然后赋值给自己。
   就是 这样
  比如
    data  a;
    input  id, a_number,b_number,c_number ;
    cards;
    1 100 200 300
    2 200 330 400
;
run;
    我就是要把 a_number,b_number,c_number 这三个变量 乘以 0.8 之后再赋值给a_number,b_number,c_number。
   就是 a_number = 0.8* a_number;
    因为数据集有很多个,而且每个数据集有很多 这样的变量,一个一个写很麻烦,想弄个宏, 就是_number结尾的自动 乘以0.8
    有没有大神解决下!!!

最佳答案

sas那个石家庄人 查看完整内容

参考了一个国外文献 data a; input id a_number b_number c_number ; cards; 1 100 200 300 2 200 330 400 ; run; proc contents data = a out=var_names(keep = name) noprint; run; data change; set var_names; where substr(name,length(name)-6) = "_number"; run; data _null_; file 'c:\change'; set change end = eof; if _n_ = 1 then put '%let allthev= '; put name; if eof the ...
二维码

扫码加我 拉你入群

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

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

全部回复
2015-6-17 10:39:36
参考了一个国外文献


data  a;
input  id  a_number b_number c_number ;
cards;
1 100 200 300
2 200 330 400
;
run;

proc contents data = a
out=var_names(keep = name) noprint;
run;

data change;
set var_names;
where substr(name,length(name)-6) = "_number";
run;

data _null_;
file 'c:\change';
set change end = eof;
if _n_ = 1 then put '%let allthev= ';
put name;
if eof then do;
call symput('num' , compress(_n_));
put ';';
put 'run;';
end;
run;

%include 'c:\change';


data result;
set a;
array x[&num] &allthev;
do i = 1 to #
x{i}=0.8*x{i};
end;
drop i;
run;
二维码

扫码加我 拉你入群

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

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

2015-6-17 10:40:47
有没有人
二维码

扫码加我 拉你入群

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

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

2015-6-17 10:52:55
如果你的id是character variable 用array即可实现

data two;
set a ;
array change {*} _numeric_;
do i=1 to dim(change);
change{i}=0.8*change{i};
end;drop i;
run;

额抱歉啊 没看清楚 你是100个变量 只有40个需要求 但不需要求的变量里也有数值型变量是吗
我再继续想想
二维码

扫码加我 拉你入群

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

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

2015-6-17 11:29:12
sas那个石家庄人 发表于 2015-6-17 10:52
如果你的id是character variable 用array即可实现

data two;
是的啊呀。
二维码

扫码加我 拉你入群

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

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

2015-6-17 15:29:37
sas那个石家庄人 发表于 2015-6-17 10:39
参考了一个国外文献
很完美的解决了问题,
改进的地方有,data _null_ 这一步,可以不用,直接 proc sql ;
select name into :list separated by ' ' from change ;
select count(*) into :count from change;
quit;
allthev 对应list
num 对应 count
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群