楼主: blliufan
1110 4

[有偿编程] 关于数字变量的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

84%

还不是VIP/贵宾

-

威望
0
论坛币
887 个
通用积分
0.0003
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2530 点
帖子
138
精华
0
在线时间
200 小时
注册时间
2009-9-28
最后登录
2021-10-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
首先我有一个变量为数字变量。
data test;
x=121122;
run;
然后我想计算x里1的个数,并表示为一个宏变量。
然后我想把出现1的每个位置也表示成几个宏变量。

这个code怎么写。
二维码

扫码加我 拉你入群

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

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

关键词:code Data test ODE COD

jennings!
沙发
nomad5 发表于 2014-3-10 19:15:31 |只看作者 |坛友微信交流群
数字符出现的位数一直是我想知道的。但是我找不到对应的函数。正则表达式也许能实现,但是我不会。
  1. data test;
  2.     x=121122;
  3. run;

  4. %macro m;
  5. data test2;
  6.     set test;
  7.     y=strip(put(x,best.));
  8.     %do i=1 %to 20;
  9.         if length(y)>(&i.-1) then v&i.=substr(y,length(y)-(&i.-1),1);
  10.     %end;
  11. run;

  12. %mend m;

  13. %m;

  14. /*v1是个位,v2是百位…… 之后就好数了*/
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
blliufan + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
blliufan 发表于 2014-3-10 19:58:59 |只看作者 |坛友微信交流群
nomad5 发表于 2014-3-10 19:15
数字符出现的位数一直是我想知道的。但是我找不到对应的函数。正则表达式也许能实现,但是我不会。
多谢。不过不是很符合我的想法。我再思考思考,如果有结果我告诉你
jennings!

使用道具

板凳
intheangel 学生认证  发表于 2014-3-10 20:31:38 |只看作者 |坛友微信交流群

%macro a(x);
data a;
do i=1 to 100;
y=substr("&x",i,1);
if y^=. then n+1;
if y=. then leave;
end;
call symput('num',n);
run;
%put #  /*算出数字有几位并赋值给宏变量num*/

data b;
do i=1 to #
y=substr("&x",i,1);
if y='1' then do;
n+1;
output;/*i为数字中哪几位是数字1*/
end;
if y=. then leave;
end;
call symput('num_1',n);
run;
%put &num_1;/*算出数字中有几个1并赋值给宏变量num_1*/

%do j=1 %to &num_1;
data c;
set b;
if _n_=&j;

data d;
set c;
call symput("num_1_&j",i);
run;
%put &&num_1_&j;/*输出数字中1所在的位置,这个变量应该输出1,2,5,同时把这3个值赋值宏变量num_1_1 num_1_2 num_1_3*/
%end;
run;

%mend a;

%a(112012131);

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
blliufan + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

使用道具

报纸
Jessup007 发表于 2014-3-10 20:41:40 |只看作者 |坛友微信交流群
  1. data test;
  2.     x=121122;
  3. run;

  4. data _null_;
  5.     set test;
  6.     y=strip(put(x,best.));
  7.     y_1=compress(y,"1");
  8.     call symput("cnt",lengthn(y)-lengthn(y_1));
  9.     j=0;
  10.     n=0;
  11.     do until(j=0);
  12.         j=findc(y,"1",j+1);
  13.         n+1;
  14.         if j ne 0 then do;
  15.              call symput("pos"||strip(n),j);
  16.         end;
  17.    end;
  18. run;
  19. %put &cnt. &pos1. &pos2. &pos3.;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
blliufan + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

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

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

GMT+8, 2024-4-28 11:52