楼主: 楚颜错
2914 11

SAS 单元格拆分 急!!! [推广有奖]

  • 0关注
  • 3粉丝

已卖:34份资源

博士生

52%

还不是VIP/贵宾

-

威望
0
论坛币
1695 个
通用积分
4.7100
学术水平
2 点
热心指数
2 点
信用等级
0 点
经验
11519 点
帖子
90
精华
0
在线时间
461 小时
注册时间
2012-5-10
最后登录
2023-9-17

楼主
楚颜错 发表于 2015-8-5 12:18:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在我有一个SAS数据集,如下:VAR中每一个值都是用|分开的,但是里面有重复的,请教怎么删除?
idVAR
0001A009|A001|A000|A001
0002

A014|A013|A012|A011

希望得到的结果如下:
idvar1var2var3var4
0001A009A001A000
0002A014A013A012A011
谢谢各位大神,谢谢!!!

二维码

扫码加我 拉你入群

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

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

关键词:单元格 sas数据集 VaR 数据集

回帖推荐

忍冬的秋 发表于12楼  查看完整内容

data a; input id $ var :$30.; cards; 0001 A009|A001|A000|A001 0002 A014|A013|A012|A011 ; run; %macro change; data b; set a; %do i=1 %to 4; var&i.=scan(var,&i.); %end; output; run; data c; set b; %do i=1 %to 3; aa=var&i.; %do j=&i.+1 %to 4; if aa=var&j. then var&j.=.; %end; %end; drop aa var; run; %mend change; %change;

priss111 发表于3楼  查看完整内容

沙发
syhebin 在职认证  发表于 2015-8-5 12:53:40
如果能导出到EXCEL里,用EXCEL的单元格拆分功能就好。

藤椅
priss111 发表于 2015-8-5 14:15:27
  1. data d;
  2. input id $ var $23.;
  3. cards;
  4. 0001 A009|A001|A000|A001
  5. 0002 A014|A013|A012|A011
  6. ;


  7. data d1(drop=delimiter);
  8.         set d;
  9.         delimiter="|";
  10.         var1=scan(var, 1, delimiter);
  11.         var2=scan(var,2,delimiter);
  12.         var3=scan(var,3,delimiter);
  13.         var4=scan(var,-1,delimiter);

  14.         proc print data=d1;
  15.         run;
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
eijuhz + 20 精彩帖子
楚颜错 + 5 + 1 + 1 精彩帖子

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

板凳
楚颜错 发表于 2015-8-5 14:25:53
priss111 发表于 2015-8-5 14:15
太感谢啦!还有个问题想请教您,就是VAR变量里面不知道有多少个“|”, 应该怎么指定呢?

报纸
楚颜错 发表于 2015-8-5 14:27:04
syhebin 发表于 2015-8-5 12:53
如果能导出到EXCEL里,用EXCEL的单元格拆分功能就好。
是一种方法,不过单元格太长啦 谢谢

地板
priss111 发表于 2015-8-5 14:44:03
楚颜错 发表于 2015-8-5 14:25
太感谢啦!还有个问题想请教您,就是VAR变量里面不知道有多少个“|”, 应该怎么指定呢?
  1. data d;
  2. input id $ var $23.;
  3. cards;
  4. 0001 A009|A001|A000|A001
  5. 0002 A014|A013|A012|A011
  6. ;  data d2(drop=delimiter z);
  7. set d;
  8. delimiter="|";
  9. var1=scan(var,1,delimiter);
  10. z=reverse(var);
  11. run;
复制代码

7
teqel 发表于 2015-8-5 21:18:10
use array + countc + scan

8
苹果叶 在职认证  发表于 2015-8-5 23:40:40
  1. data d;
  2. infile datalines truncover dsd;
  3. input id $1-4 var $5-200 ;
  4. column=countw(var,'|');
  5. datalines;
  6. 0001 A009|A001|A000|A001
  7. 0002 A014|A013|A012|A011
  8. ;
  9. run;

  10. proc sql noprint;
  11.   select max(column) into :column from d;
  12. quit;

  13. data test;
  14.   set d;
  15.   array col $10. var1-var%cmpres(&column.);
  16.   do i=1 to &column.;
  17.     col(i)=scan(var, i, '|');
  18.   end;
  19. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
Tigflanker + 1 + 2 + 3 分析的有道理

总评分: 论坛币 + 1  学术水平 + 2  热心指数 + 3   查看全部评分

9
jisile 发表于 2015-8-6 11:44:43
怎么做到删除重复值呢?

10
楚颜错 发表于 2015-8-6 14:09:46
teqel 发表于 2015-8-5 21:18
use array + countc + scan
有道理,学习!!

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

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