楼主: 郭腾
5005 6

substr函数的使用问题 [推广有奖]

  • 10关注
  • 1粉丝

博士生

46%

还不是VIP/贵宾

-

威望
0
论坛币
3227 个
通用积分
0.0750
学术水平
4 点
热心指数
8 点
信用等级
4 点
经验
5226 点
帖子
283
精华
0
在线时间
241 小时
注册时间
2012-11-8
最后登录
2018-6-6

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求大神帮忙看一下,我想截取变量的某一位有效数字,这是我写的程序,不知道为什么
跑完结果实在是不理想,请大神指点迷津,谢谢啦,附数据 论文原始数据.xls (54.5 KB)

PROC IMPORT OUT= RAWDATA.raw
            DATAFILE= "C:\Documents and Settings\gt\桌面\论文发表准备\Ra
wdata\论文原始数据.xls"
            DBMS=EXCEL REPLACE;
     SHEET="转置后原始数据汇总$";
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;

/*  数据处理获取某一位或某几位有效数组 并统计频率   */

data STEP_1(KEEP=X1 X2 X3 X4 X5 X6 X7 y1);
    set RAWDATA.raw;
        x1=put(M1,$6.);
        x2=put(M2,$6.);
        x3=put(M3,$6.);
        x4=put(M4,$12.);
        x5=put(M5,$12.);
        x6=put(M6,$12.);
        x7=put(M7,$12.);
run;

%MACRO BEN_NUM(OUTDATA,i,j);
data &OUTDATA;
     set RAWDATA.raw;
         y1=substr(M1,&i,&j);
         y2=substr(M2,&i,&j);
         y3=substr(M3,&i,&j);
         y4=substr(M4,&i,&j);
         y5=substr(M5,&i,&j);
         y6=substr(M6,&i,&j);
         y7=substr(M7,&i,&j);
drop M1 M2 M3 M4 M5 M6 M7;
run;
%MEND BEN_NUM ;


二维码

扫码加我 拉你入群

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

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

关键词:SUBSTR subs R函数 SUB UBS Documents 论文发表 EXCEL 统计

沙发
wwang111 发表于 2014-8-18 10:37:31 |只看作者 |坛友微信交流群
是这个意思?

  1. PROC IMPORT OUT= RAWDATA.raw
  2.     DATAFILE= "C:\Documents and Settings\gt\桌面\论文发表准备\Rawdata\论文原始数据.xls"
  3.     DBMS=EXCEL REPLACE;
  4.     SHEET="转置后原始数据汇总";   
  5.     GETNAMES=YES;   
  6.     MIXED=NO;   
  7.     SCANTEXT=YES;   
  8.     USEDATE=YES;   
  9.     SCANTIME=YES;
  10. RUN;

  11. data STEP1(KEEP=M:);  
  12.        set RAWDATA.raw;   
  13.            array x x1-x7;
  14.            array m $ m1-m7;
  15.            do i=1 to 7;
  16.            if x[i] ne . then m[i]=strip(put(x[i],best.));
  17.            end;
  18. run;

  19. %MACRO BEN_NUM(OUTDATA,i,j);
  20. data &OUTDATA;
  21.      set step1;
  22.          y1=substr(M1,&i,&j);
  23.          y2=substr(M2,&i,&j);
  24.          y3=substr(M3,&i,&j);
  25.          y4=substr(M4,&i,&j);
  26.          y5=substr(M5,&i,&j);
  27.          y6=substr(M6,&i,&j);
  28.          y7=substr(M7,&i,&j);
  29. drop M:;
  30. run;
  31. %MEND BEN_NUM ;
复制代码


使用道具

藤椅
郭腾 发表于 2014-8-18 13:36:28 |只看作者 |坛友微信交流群
wwang111 发表于 2014-8-18 10:37
是这个意思?
这个好像还是没运行出来,我是希望得到数据集中每个变量的某一位有效数字(可以通过给i,j赋值自由指定),有的变量数据的位数并不一致,有的上边一半是四位,下面几个观测就变成5位了

使用道具

板凳
zhengbo8 发表于 2014-8-18 17:10:47 |只看作者 |坛友微信交流群
我估计你是要这种。

  1. PROC IMPORT OUT= RAWDATA.raw
  2.     DATAFILE= "C:\Documents and Settings\gt\桌面\论文发表准备\Rawdata\论文原始数据.xls"
  3.     DBMS=EXCEL REPLACE;
  4.     SHEET="转置后原始数据汇总";   
  5.     GETNAMES=YES;   
  6.     MIXED=NO;   
  7.     SCANTEXT=YES;   
  8.     USEDATE=YES;   
  9.     SCANTIME=YES;
  10. RUN;

  11. %MACRO BEN_NUM(OUTDATA,i,j);
  12. data &OUTDATA;
  13.         set RAWDATA.raw;
  14.            if x1 ne . then y1=substr(strip(put(x1,%eval(&j.+1).&j.)),&i,&j);else y1=.;
  15.            if x2 ne . then y2=substr(strip(put(x2,%eval(&j.+1).&j.)),&i,&j);else y2=.;
  16.            if x3 ne . then y3=substr(strip(put(x3,%eval(&j.+1).&j.)),&i,&j);else y3=.;
  17.            if x4 ne . then y4=substr(strip(put(x4,%eval(&j.+1).&j.)),&i,&j);else y4=.;
  18.            if x5 ne . then y5=substr(strip(put(x5,%eval(&j.+1).&j.)),&i,&j);else y5=.;
  19.            if x6 ne . then y6=substr(strip(put(x6,%eval(&j.+1).&j.)),&i,&j);else y6=.;
  20.            if x7 ne . then y7=substr(strip(put(x7,%eval(&j.+1).&j.)),&i,&j);else y7=.;
  21.         drop x1 x2 x3 x4 x5 x6 x7;
  22. run;
  23. %MEND BEN_NUM ;

  24. %BEN_NUM(b,1,15);
复制代码

试试。

使用道具

报纸
郭腾 发表于 2014-8-18 23:21:54 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-8-18 17:10
我估计你是要这种。
亲,你自己试了吗?一跑都是缺失值啊

使用道具

地板
郭腾 发表于 2014-8-18 23:24:55 |只看作者 |坛友微信交流群
我想达到的效果就是比方说X是123 456 789 147 258 369 截取第一位有效数字后获得变量Y1 是1 4 7 1 2 3
截取第二位有效数字后获得变量Y2是 2 5 8 4 5 6

使用道具

7
zhengbo8 发表于 2014-8-19 10:27:13 |只看作者 |坛友微信交流群
对不起,主要是不了解你的意图。

  1.       PROC IMPORT OUT= a
  2.         DATAFILE= "C:\Documents and Settings\Administrator\桌面\论文原始数据.xls"
  3.         DBMS=EXCEL REPLACE;
  4.         SHEET="转置后原始数据汇总";   
  5.         GETNAMES=YES;   
  6.         MIXED=NO;   
  7.         SCANTEXT=YES;   
  8.         USEDATE=YES;   
  9.         SCANTIME=YES;
  10.     RUN;

  11.     %MACRO BEN_NUM(OUTDATA,i,j);
  12.     data &OUTDATA;
  13.             set a;
  14.             %do k=1 %to &i;
  15.                   if x&k. ne . then  do;
  16.                           y&k.=input(substr(strip(put(x&k.,%eval(&j.*2).%eval(&j.+1))),&j.,1),best.);
  17.                   end;
  18.                   else y&k.=.;
  19.             %end;
  20.             drop x1 x2 x3 x4 x5 x6 x7;
  21.     run;
  22.     %MEND BEN_NUM ;

  23.     %BEN_NUM(b,7,3);
复制代码


1、注意文件路径
2、i为x的个数,j为你需要的某位有效数字
3、例如,7个变量都取第3位有效数字。
2014-08-19_103057.png

使用道具

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

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

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

GMT+8, 2024-4-26 20:43