请选择 进入手机版 | 继续访问电脑版
楼主: liyichen17
12547 16

[问答] 如何批量将所有数值型变量转化成字符型? [推广有奖]

  • 4关注
  • 1粉丝

讲师

3%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
1.0166
学术水平
4 点
热心指数
5 点
信用等级
2 点
经验
19465 点
帖子
165
精华
0
在线时间
602 小时
注册时间
2012-2-28
最后登录
2022-12-20

liyichen17 在职认证  发表于 2014-7-16 11:03:36 |显示全部楼层 |坛友微信交流群
20论坛币
如何批量将所有数值型变量转化成字符型?我写了下面程序,用array转化,还是不行,求解?
  1. data a1;
  2.   set a;
  3.   array y[*] _numeric_;
  4.   do i = 1 to dim(y);
  5.     y[i]=put(y[i],$12.);
  6.   end;
  7. run;
复制代码


日志文件:
QQ截图20140716110224.png

最佳答案

zhanglianbo35 查看完整内容

不需要用数组: proc contents data=a1 out=cont noprint; run; proc sql noprint; select compress(name||'='||'_'||name) into: renames separated by' ' from cont where type=1 ; select compress(name||'=strip(put(_'||name||", $12.));")into: tochar separated by' ' from cont where type=1 ; quit; %put "content: &tochar"; data a_new; set a1 (rename=(&renames.)); &tochar; drop _: ; ...
关键词:数值型 字符型 numeric array Eric 如何
不需要用数组:
proc contents data=a1 out=cont noprint; run;

proc sql noprint;
select compress(name||'='||'_'||name) into: renames separated by' '
from cont
where type=1 ;

select compress(name||'=strip(put(_'||name||", $12.));")into: tochar separated by' '
from cont
where type=1 ;  
quit;

%put "content:  &tochar";

data a_new;
set a1 (rename=(&renames.));
&tochar;
drop _: ;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 5 热心帮助其他会员

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

使用道具

hello_fj 发表于 2014-7-16 11:36:56 |显示全部楼层 |坛友微信交流群
需要重新定义一个数组X 然后再做循环  而且是 X[I]=put(Y[i],12.)

使用道具

ilovekate 发表于 2014-7-16 12:10:41 |显示全部楼层 |坛友微信交流群
%let k=;/*insert number of numeric variables of your data set*/
data your_data(drop=i);
set your_data;
array num_all[*] _numeric_;
array char_all[*] $ char1 - char&k.;
do I=1 to DIM(num_all);
char_all[i]=put(num_all[i], $12.);
end;
run;

使用道具

ilovekate 发表于 2014-7-16 12:11:56 |显示全部楼层 |坛友微信交流群

%let k=;/*insert number of numeric variables of your data set*/
data your_data(drop=i);
set your_data;
array num_all[*] _numeric_;
array char_all[*] char1 - char&k.;
do I=1 to DIM(num_all);

char_all[i]=put(num_all[i],12.);

end;
run;

使用道具

Tigflanker 发表于 2014-7-16 13:05:45 |显示全部楼层 |坛友微信交流群
z[i] = put(y[i], best.);  *z[i] is char;

使用道具

freerunning_sky 在职认证  发表于 2014-7-16 13:28:05 |显示全部楼层 |坛友微信交流群
  1. data your_data;
  2.         array num_all(*) num1-num10;
  3.         drop i j;
  4.         do i=1 to 10000;
  5.                 do j=1 to dim(num_all);
  6.                         num_all(j)=round(10000000*ranuni(i),0.01);
  7.                 end;
  8.                 output;
  9.         end;
  10. run;

  11. data _null_;
  12.         set sashelp.vtable;
  13.         where libname="WORK" & memname="YOUR_DATA";
  14.         call symput("K",left(num_numeric));
  15. run;


  16. data your_data;
  17.         set your_data;
  18.         array num_all[*] _numeric_;
  19.         array char_all[*] $20. char1-char&k.;
  20.         do i=1 to dim(num_all);
  21.                 char_all[i]=compress(left(num_all(i)));
  22.         end;
  23.         drop i;
  24. run;
复制代码
字符的长度根据你的需要可进行调整。

使用道具

jingju11 发表于 2014-7-17 11:21:22 |显示全部楼层 |坛友微信交流群
zhanglianbo35 发表于 2014-7-16 15:34
不需要用数组:
proc contents data=a1 out=cont noprint; run;
这个程须bugs太多。如果warning可以忍受的话,对小数自动取整就差不多是错误的。京剧

使用道具

jingju11 发表于 2014-7-17 11:21
这个程须bugs太多。如果warning可以忍受的话,对小数自动取整就差不多是错误的。京剧
strip(put(_'||name||", $12.));")
这个是可以改成  strip(put(_'||name||", best.));") 的,我看提问的那个人是需要写成 $12。

使用道具

jingju11 发表于 2014-7-17 23:22:08 |显示全部楼层 |坛友微信交流群
zhanglianbo35 发表于 2014-7-17 21:34
strip(put(_'||name||", $12.));")
这个是可以改成  strip(put(_'||name||", best.));") 的,我看提问的 ...
他原始哪个语句根本没有搞清format的定义和类型.
另外如果某些数据型变量名以_ 起始,也有问题把.
京剧

使用道具

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

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

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

GMT+8, 2024-3-28 20:54