楼主: jinlin2009
5064 12

[原创博文] 变量中加入分隔符 [推广有奖]

  • 1关注
  • 0粉丝

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
98 个
通用积分
0.0015
学术水平
3 点
热心指数
4 点
信用等级
2 点
经验
443 点
帖子
42
精华
0
在线时间
54 小时
注册时间
2008-11-2
最后登录
2012-4-24

楼主
jinlin2009 发表于 2012-2-17 05:10:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一个数据集,里面有一个变量如下:

0122116666
021122
03552211

变量长度不一,从2到30不等,但长度都是偶数。
我想每两个字符间插入一个逗号,使得最后变量如下:

01,22,11,66,66
02,11,22
03,55,22,11

以上虽用逗号分隔,但是仍然算作一个变量。请问应当如何实现?先谢了!
二维码

扫码加我 拉你入群

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

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

关键词:如何实现 数据集 如何

回帖推荐

maidenhan 发表于2楼  查看完整内容

U can use the following code. data test01; format var $20.; input var $; cards; 0122116666 021122 03552211 ;run; data test02(drop = n ii); format new_var $20.; set test01; n = length(var)/2; new_var = substr(var,1,2); do ii= 2 to n; new_var = compress(new_var||','||substr(var,ii*2-1,2)); end; run;

本帖被以下文库推荐

沙发
maidenhan 发表于 2012-2-17 08:30:40
U can use the following code.

data test01;
        format var $20.;
        input var $;
cards;
0122116666
021122
03552211
;run;
data test02(drop = n ii);
        format new_var $20.;
        set test01;
        n = length(var)/2;
        new_var = substr(var,1,2);
        do ii= 2 to n;
                new_var = compress(new_var||','||substr(var,ii*2-1,2));
        end;
run;
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
Actree + 1 + 1 + 1 分析的有道理
jinlin2009 + 1 + 1 + 1 技术含量高

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

藤椅
sl122113 发表于 2012-2-17 23:33:00
maidenhan 发表于 2012-2-17 08:30
U can use the following code.

data test01;
能不能解释下compress函数功能,谢谢!
Let Our Life Be Magic And Open

板凳
jinlin2009 发表于 2012-2-18 05:18:49
sl122113 发表于 2012-2-17 23:33
能不能解释下compress函数功能,谢谢!
compress就是把变量中的指定字符去掉,默认是空格

报纸
sl122113 发表于 2012-2-18 08:40:22
jinlin2009 发表于 2012-2-18 05:18
compress就是把变量中的指定字符去掉,默认是空格
多谢!
Let Our Life Be Magic And Open

地板
bobguy 发表于 2012-2-19 10:49:28
The good part of SAS is that it provides many solutions. Here is a way to leverage a SAS format.


proc format lib=work;
  picture num2c
      low - high = '00,00,00,00,00,09'
      ;
quit;

data tmp;
   do x=11111111,11002255,123456789012;
   y=put(x, num2c.);
   output;
   end;
run;

proc print;run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Actree + 1 + 1 + 1 观点有启发

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

7
jingju11 发表于 2012-2-19 22:57:37
变量长度不一,从2到30不等...
我猜想既然变量长度可以是30, 就很难假设这个变量还是数字型的。
京剧

8
bobguy 发表于 2012-2-20 10:49:24
jingju11 发表于 2012-2-19 22:57
我猜想既然变量长度可以是30, 就很难假设这个变量还是数字型的。
京剧
Why is that a problem?

proc format lib=work;
  picture num2c
      low - high = '00,00,00,00,00,09'
      ;
quit;

data tmp;
   length x 20;
   do x='11111111','11002255','123456789012';
   y=put(input(x, 20.), num2c.);
   output;
   end;
run;

proc print;run;

9
darkworld 发表于 2012-2-20 11:19:47
jingju11 发表于 2012-2-19 22:57
我猜想既然变量长度可以是30, 就很难假设这个变量还是数字型的。
京剧
看来你没有碰到多少数据,做一些financial ratio的时候出个那种古怪数字也不算不正常。尽管大多都是直接扔掉的。。。

10
jingju11 发表于 2012-2-20 13:12:04
你可能没有理解我的意思。一个变量有三十个字节而想当然为数据型变量,在sas里是不合理的。并不是我认为三十个字节的数字不存在。我没有sas在手边所以无法验证picture格式的正确性。我感觉input|(x, 30.)无法正确读取这个长字节的字符型数字。我只是猜测。我的感觉是利用picture格式可能无法达到作者的意图。
我的确没有见过很多的数据形式。这一点不错。
京剧

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

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