楼主: 李真LZ
2823 13

[问答] 提取数据 [推广有奖]

  • 0关注
  • 0粉丝

大专生

55%

还不是VIP/贵宾

-

威望
0
论坛币
1050 个
通用积分
0
学术水平
1 点
热心指数
2 点
信用等级
0 点
经验
833 点
帖子
33
精华
0
在线时间
49 小时
注册时间
2015-8-13
最后登录
2021-3-18

楼主
李真LZ 发表于 2017-5-16 08:53:36 |AI写论文
20论坛币
各位大神, 我想把下表中Y列数据提取"品名、数量”两列,程序应该怎么编写?
Y品名数量
07960极速曾艳剂2瓶07960极速曾艳剂2瓶
01024真皮增亮剂2瓶01024真皮增亮剂2瓶
多功能泡沫清洁剂32瓶多功能泡沫清洁剂32瓶
洗车人家小毛巾2条洗车人家小毛巾2条
一次性手套30个一次性手套30个
一次性口罩30包一次性口罩30包
砭鹊酒店油烟机清洗机1台砭鹊酒店油烟机清洗机1台
HT-154刷机/HT-154一台HT-154刷机/HT-154一台
飞天宋4.5米3根飞天宋4.5米3根
飞天唐鱼竿4.5米4根飞天唐鱼竿4.5米4根
飞跃赤焰4.5米3根飞跃赤焰4.5米3根

关键词:数据提取 一次性 多功能 小毛巾 油烟机 一次性手套 清洁剂 清洗机 小毛巾 油烟机
已有 1 人评分学术水平 收起 理由
zhuosn + 1 精彩帖子

总评分: 学术水平 + 1   查看全部评分

沙发
l1i2n3i4n5g 在职认证  发表于 2017-5-16 08:53:37
  1. data test;
  2. length y $100.;
  3. input y $;
  4. cards;
  5. 07960极速曾艳剂2瓶
  6. 01024真皮增亮剂2瓶
  7. 多功能泡沫清洁剂32瓶
  8. 洗车人家小毛巾2条
  9. 一次性手套30个
  10. 一次性口罩30包
  11. 砭鹊酒店油烟机清洗机1台
  12. HT-154刷机/HT-154一台
  13. 飞天宋4.5米3根
  14. 飞天唐鱼竿4.5米4根
  15. 飞跃赤焰4.5米3根
  16. ;
  17. run;

  18. data test1;
  19. set test;
  20. Pattern1=PRXPARSE('/^(.+\D)(\d+\D{2}\s+)$/');
  21. Pattern2=PRXPARSE('/^(.+\d)(\D{4,}\s+)$/');
  22. if PRXMATCH(Pattern1,y) then
  23.         do;
  24. /*        match1=PRXMATCH(Pattern1,y);*/
  25.         pm=PRXPOSN(Pattern1,1,y);
  26.         sl=PRXPOSN(Pattern1,2,y);
  27.         end;
  28. else if PRXMATCH(Pattern2,y) then
  29.         do;
  30. /*        match2=PRXMATCH(Pattern2,y);*/
  31.         pm=PRXPOSN(Pattern2,1,y);
  32.         sl=PRXPOSN(Pattern2,2,y);
  33.         end;
  34. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
李真LZ + 1 + 1 + 1 精彩帖子

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

藤椅
foocares 发表于 2017-5-16 09:13:19
data a;
      set yourdata(drop = Y);
run;

板凳
李真LZ 发表于 2017-5-16 09:57:03
foocares 发表于 2017-5-16 09:13
data a;
      set yourdata(drop = Y);
run;
这个程序直接删除了Y列,不是我想要的结果呀~

报纸
无心メ无绪 发表于 2017-5-16 10:07:20
  1. data aa;
  2.         set a;
  3.         length Y $200;
  4.         Y=strip(品名)||strip(数量);
  5. run;
复制代码

地板
李真LZ 发表于 2017-5-16 10:28:31
无心メ无绪 发表于 2017-5-16 10:07
这个程序也没有运行出结果来~

7
无心メ无绪 发表于 2017-5-16 10:36:48
我理解错了 Y是现在有的data 后面两列才是要做的吧?我理解反了 这个就是所有的data吗?会有类似“HT-154刷机/HT-154十一台”这样的data吗?有的话就不知道怎么做了
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

8
Tata-qiqi 学生认证  发表于 2017-5-16 10:50:20
data aa;
   set tablename;
   Y=trim(var1)||var2;
run;

你把品名和数量的英文变量名找出来  填上去就好
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

9
lovexialulu 发表于 2017-5-16 10:51:10
  1. data a;
  2. length x $50.;
  3. x='1114mkd1ge';output;
  4. x='223kmkd2ping';output;
  5. x='mmkmkd332tiao';output;
  6. x='mmklm3mi';output;
  7. x='mmkl4mk33ge';output;
  8. x='m3geng';output;
  9. x='m#3TWOgeng';output;
  10. x='HT -15/ht-145YIgeng';output;
  11. run;

  12. data b;
  13. set a;
  14. length name num $50.;
  15. nn=prxmatch("/YI|TWO/",x);
  16. if nn ne 0 then do;name=substr(x,1,nn-1);num=substr(x,nn); end;
  17. else do;
  18. name=prxchange("s/(.+)?(\D)(\d+.+\s)/\1\2/",-1,x);/*update----begin with only word,such as 'm3geng'*/
  19. num=prxchange("s/(.+)?(\D)(\d+.+\s)/$3/",-1,x);
  20. end;
  21. run;
复制代码

OUTPUT.PNG (10.87 KB)

OUTPUT.PNG

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
李真LZ + 1 + 1 + 1 精彩帖子
admin_kefu + 10 + 20 热心帮助其他会员

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

10
learsaas 发表于 2017-5-16 13:33:45
  1. data b;
  2.     set a;
  3.     attrib product length=$50 label='品名';
  4.     attrib quantity length=$50 label='数量';
  5.     retain prxID1 prxID2;
  6.     if _n_=1 then do;
  7.        prxID1=prxparse('m/(\d+)(瓶|根|米|台|个|条|包)$/');
  8.        prxID2=prxparse('m/([一二三四五六七八九十廿卅卌百千万零壹贰叁肆伍陆柒陆柒捌玖拾佰仟亿]+)(瓶|根|米|台|个|条|包)$/');
  9.     end;
  10.         p1=prxmatch(prxID1,trim(y));
  11.     select;
  12.        when (p1) do;
  13.                         product=substr(y,1,P1-1);
  14.                         quantity=substr(y,p1);
  15.            end;
  16.        otherwise do;
  17.                            p2=prxmatch(prxID2,trim(y));
  18.                         if p2>0 then do;
  19.                                 product=substr(y,1,P2-1);
  20.                                 quantity=substr(y,p2);
  21.                         end;
  22.            end;
  23.     end;
  24.         drop p1 p2 prxID1 prxID2;
  25. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
李真LZ + 1 + 1 + 1 精彩帖子

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 18:45