楼主: edwardzxf
1789 9

Data step, 用@定位input数据 [推广有奖]

  • 0关注
  • 2粉丝

已卖:32份资源

讲师

26%

还不是VIP/贵宾

-

威望
0
论坛币
222 个
通用积分
0.4203
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
3991 点
帖子
242
精华
0
在线时间
375 小时
注册时间
2010-7-30
最后登录
2021-5-25

楼主
edwardzxf 学生认证  发表于 2013-1-25 20:25:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我们知道在用DATA步infile 外部数据的时候,可以用@“text_string”来定位所读入的数据,如:

Data temp;
        input @ "XYZ" value $;
        Datalines;
        ABCXYZETPF
        EIFTXYZOPBC
        ;
Run;
最终得到的数据将是:
Value
ETPF
OPBC

但我想让它从“XYZ”开始读,到“P” 终止,得到:
Value
ET
O

请问要如何修改“input @ "XYZ" value $;”, 可以用@开头,能有什么表示结尾的不? 谢谢

二维码

扫码加我 拉你入群

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

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

关键词:Data step Input Step Data put 定位 如何

沙发
pobel 在职认证  发表于 2013-1-25 20:59:37
Data temp;
        infile cards dlm='P';
        input @ "XYZ" value $;
        Datalines;
ABCXYZETPF
EIFTXYZOPBC
        ;
Run;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 很巧妙。
Imasasor + 60 + 60 + 2 + 1 + 1 精彩帖子, i never knew this before

总评分: 经验 + 60  论坛币 + 60  学术水平 + 3  热心指数 + 2  信用等级 + 2   查看全部评分

和谐拯救危机

藤椅
edwardzxf 学生认证  发表于 2013-1-25 23:04:30
pobel 发表于 2013-1-25 20:59
Data temp;
        infile cards dlm='P';
        input @ "XYZ" value $;
非常感谢,我试试先

板凳
edwardzxf 学生认证  发表于 2013-1-26 23:53:27
pobel 发表于 2013-1-25 20:59
Data temp;
        infile cards dlm='P';
        input @ "XYZ" value $;
其实是这样的,我要input两个变量,每个变量结尾的字符可能不一样, 如value1以P结尾,value2以B结尾。如下:

Data temp;
        input @ "XYZ" value1  $
                @ "XYZ" value2 $;
        Datalines;
ABCXYZETPFB
EIFTXYZOPBC
        ;
Run;
得到的结果:
value1 value2
ET      ETPF
ZO      ZOP

所以用dlm="“重新定义分割符是不行的,因为这样定义的事对每一个变量都一样的。。有别的方法不? 感激涕零!!

报纸
pobel 在职认证  发表于 2013-1-27 08:24:43
edwardzxf 发表于 2013-1-26 23:53
其实是这样的,我要input两个变量,每个变量结尾的字符可能不一样, 如value1以P结尾,value2以B结尾。如 ...
楼主可以试试下面这段。不过楼主想要的结果第一行没有“Z",第二行为什么有”Z"?
Data temp;
        input;
        value1=scan(substr(_infile_,index(_infile_,"XYZ")+3),1,"P");
        value2=scan(substr(_infile_,index(_infile_,"XYZ")+3),1,"B");
        Datalines;
ABCXYZETPFB
EIFTXYZOPBC
;
Run;
和谐拯救危机

地板
edwardzxf 学生认证  发表于 2013-1-27 14:06:21
pobel 发表于 2013-1-27 08:24
楼主可以试试下面这段。不过楼主想要的结果第一行没有“Z",第二行为什么有”Z"?
Data temp;
         ...
感谢你的提醒,现在终于解决了,我现在改成如下:
Data temp;
        input @ "XYZ" value1_  $        /*有必要可以指定字符长度,尽量大些*/
                @ "XYZ" value2_ $;
        Datalines;
ABCXYZETPFB
EIFTXYZOPBC
        ;
value1=scan(value1_,1,"P");
value2=scan(value2_,1,"B");
keep value1 value2;

Run;
得到的结果:
value1 value2
ET      ETPF
O       OP

感谢大家的参与,集众人之智,解棘手之题。。

7
pobel 在职认证  发表于 2013-1-27 15:32:58
edwardzxf 发表于 2013-1-27 14:06
感谢你的提醒,现在终于解决了,我现在改成如下:
Data temp;
        input @ "XYZ" value1_  $       ...
这段程序是不能得到你列出的结果的。
1. temp只有一条记录,而不是两条。而且结果分别是ETPFB,OPBC
2. datalines后面的语句是会报错的。如果要对变量进行操作,需要在DATALINES语句之前。
和谐拯救危机

8
edwardzxf 学生认证  发表于 2013-1-27 15:56:19
pobel 发表于 2013-1-27 15:32
这段程序是不能得到你列出的结果的。
1. temp只有一条记录,而不是两条。而且结果分别是ETPFB,OPBC
2. ...
其实我用的不是datalines, 而是infile, 用datalines 只是想让大家看到具体的数据...类似于:
Data temp;
        infile etr MISSOVER;
        input @ "XYZ" value1_  $        /*有必要可以指定字符长度,尽量大些*/
                @ "XYZ" value2_ $;
        ;
value1=scan(value1_,1,"P");
value2=scan(value2_,1,"B");
keep value1 value2;

Run;

9
HENINGWHU 发表于 2013-2-3 03:06:29
旁听来了,顺带混点经验换币,穷人啊!

10
oneoneagain 发表于 2013-2-5 13:16:19
学习一下

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

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