楼主: 水加菲
4144 8

[问答] 创建新变量计算 [推广有奖]

  • 0关注
  • 0粉丝

初中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1771 点
帖子
10
精华
0
在线时间
23 小时
注册时间
2013-8-14
最后登录
2019-7-8

楼主
水加菲 发表于 2016-5-18 09:56:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
acct

Payment1

Payment2

Payment3

Payment4

Payment5

Payment6

jim

M

F

M

G

N

M

sam

F

F

G

G

N

M

Smith

M

G

F

F

M

N

表格如上。请教一下各位大牛,如果想要创建一个新的变量来计算每一个账户在payment1到payment6一共有几个M,是否可行呢?要怎么写SAS CODE呢?谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:新变量 Payment Smith CCTP 是否可行

沙发
麦弥 发表于 2016-5-18 14:28:04
新手,互相交流。
我的思路是:1.将数据集转置;2.将payment中字符变量转化为数值变量,方便求和计算;3.用sql得到想要的变量;4.再和最初数据集merge到一起。
data pay;
        input acct $ pay1 $ pay2 $ pay3 $ pay4 $ pay5 $ pay6 $;
datalines;
jim M F M G N M
sam F F G G N M
smith M G F F M N
;
RUN;
proc sort data=pay;
        by acct;
run;
proc transpose data=pay out=pay_tran;
        by acct;
        var pay1-pay6;
run;
data pay_tran;
        set pay_tran;
        if col1='M' then payn=1;
        else payn=0;
run;

proc sql;
        create table aa as
        select acct as acct, sum(payn) as mm
        from pay_tran
        group by acct;
quit;
proc sort data=pay;
        by acct;
run;
proc sort data=aa;
        by acct;
run;
data final;
        merge pay aa;
        by acct;
run;

藤椅
麦弥 发表于 2016-5-18 14:28:26
data pay;
        input acct $ pay1 $ pay2 $ pay3 $ pay4 $ pay5 $ pay6 $;
datalines;
jim M F M G N M
sam F F G G N M
smith M G F F M N
;
RUN;
proc sort data=pay;
        by acct;
run;
proc transpose data=pay out=pay_tran;
        by acct;
        var pay1-pay6;
run;
data pay_tran;
        set pay_tran;
        if col1='M' then payn=1;
        else payn=0;
run;

proc sql;
        create table aa as
        select acct as acct, sum(payn) as mm
        from pay_tran
        group by acct;
quit;
proc sort data=pay;
        by acct;
run;
proc sort data=aa;
        by acct;
run;
data final;
        merge pay aa;
        by acct;
run;

板凳
l1i2n3i4n5g 在职认证  发表于 2016-5-18 14:40:29
data test;
input acct payment1 payment1  payment2 payment3 payment3  payment4 payment5 payment5  payment6 $;
count=(payment1="M")+(payment2="M")+(payment3="M")+(payment4="M")+(payment5="M")+(payment6="M");
cards;
jim M F M G N M
sam F F G G N M
Smith M G F F M N
;
run;

报纸
水加菲 发表于 2016-5-19 06:04:02
麦弥 发表于 2016-5-18 14:28
data pay;
        input acct $ pay1 $ pay2 $ pay3 $ pay4 $ pay5 $ pay6 $;
datalines;
谢谢这么详细的回复!今天跟朋友讨论了一下,我们先用count再用sum得到了结果。count(of...)弄个6次,然后再sum。

地板
水加菲 发表于 2016-5-19 06:05:02
l1i2n3i4n5g 发表于 2016-5-18 14:40
data test;
input acct payment1 payment1  payment2 payment3 payment3  payment4 payment5 payment5  pa ...
谢谢回复!这个比我们今天讨论的还要简单!明天试试!

7
麦弥 发表于 2016-5-19 10:47:48
水加菲 发表于 2016-5-19 06:05
谢谢回复!这个比我们今天讨论的还要简单!明天试试!
学习了,谢谢

8
zqy458219593 发表于 2016-5-19 13:58:39
data pay;
        input acct $ pay1 $ pay2 $ pay3 $ pay4 $ pay5 $ pay6 $;
        datalines;
jim M F M G N M
sam F F G G N M
smith M G F F M N
;
RUN;
data a;
        set pay;
        flag=0;
        array pay(6) pay1-pay6;
        retain flag;
        do i=1 to 6;
                if find(pay(i),'M') then do;
                        flag+1;
                end;
        end;
run;

9
水加菲 发表于 2016-5-20 07:22:45
zqy458219593 发表于 2016-5-19 13:58
data pay;
        input acct $ pay1 $ pay2 $ pay3 $ pay4 $ pay5 $ pay6 $;
        datalines;
谢谢回复!试试运行一下

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

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