楼主: dxystata
3087 9

如何得到字符型变量的每一行的非缺失值 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2015-1-10 16:53:12 |AI写论文
50论坛币
var1 var2 var3
a  
          b   
该数据集中var1 var2 var3 均为字符型变量,如何得到一个新变量x,其值为字符型变量var1 var2 var3的每一行的非缺失值? 谢谢!
结果为
x
a
b



关键词:字符型变量 字符型 缺失值 VaR 新变量 如何

沙发
mingfeng07 学生认证  发表于 2015-1-10 18:26:09
  1. data a;
  2. var1='a';var2='';var3='';output;
  3. var1='';var2='b';var3='';output;
  4. run;
  5. data want(drop=i);
  6. set a;
  7. array a{*} var1 var2 var3;
  8. do i=1 to dim(a);
  9. if a(i)^='' then x=a(i);
  10. end;
  11. run;
复制代码

藤椅
wpfwxn 发表于 2015-1-10 19:33:20
用cat函数

板凳
sas9.4 发表于 2015-1-10 19:49:39
data xxx;
  set table1;
  newvar=  catx('', var1,var2,var3);
run;

报纸
teqel 发表于 2015-1-10 21:26:22
  1. data a;
  2. array var{3} $;
  3. input var1-var3;
  4. t=cats(of var{*});
  5. cards;
  6. a . .
  7. . b .
  8. ;
复制代码

地板
Tigflanker 发表于 2015-1-10 21:37:13
  1. data have;
  2.   input var1 $ var2 $ var3 $;
  3.   cards;
  4. a . .
  5. . b .
  6. run;

  7. proc transpose data = have out = want;
  8.   var var:;
  9. run;

  10. data want;
  11.   set;

  12.   x = coalescec(of col:);
  13. run;
复制代码

7
sas9.4 发表于 2015-1-12 20:51:46
Tigflanker 发表于 2015-1-10 21:37
你这样写如果有多个非缺失值呢?

8
我舅是_黄蓉 发表于 2015-1-13 09:14:04
Tigflanker 发表于 2015-1-10 21:37
如果是这样,就弄不出来了(一个变量有两个非缺失值)
data have;
  input var1$ var2 $ var3 $;
  cards;
a e .
. b .
run;

9
就喜欢马 发表于 2015-1-13 11:46:55
sas9.4 发表于 2015-1-12 20:51
你这样写如果有多个非缺失值呢?
假如多个非缺失值都放在一个变量中,用‘/’分开,则
  1. proc sql;
  2. select name into :varlist
  3. separated by " "
  4. from dictionary.columns
  5. where libname="WORK" and memname="M";/*只要改这里的逻辑库和逻辑库中的数据集名就可以了*/
  6. quit;
  7. proc sql;
  8. select name into :varlist2
  9. separated by ","
  10. from dictionary.columns
  11. where libname="WORK" and memname="M";/*只要改这里的逻辑库和逻辑库中的数据集名就可以了*/
  12. quit;
  13. data mm;
  14. set m;
  15. array m[*] &varlist;
  16. do i=1 to dim(m);
  17. x=catx('/',&varlist2);
  18. end;
  19. run;
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 50 热心帮助其他会员

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

10
Tigflanker 发表于 2015-1-14 20:27:39
coalescec 函数本来就是取他参数列表中第一个出现的字符型非缺失值。

至于怎么用,看楼主数据意图了。

若是一票变量的值都要汲取,那当然是用cat族函数最妥当了。

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

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