1151 3

[作业] SAS入门小辣鸡的一个问题!!求各位大神帮忙解答一下~ [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

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

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
1.原数据: (⊙﹏⊙)绕太阳.png
2.想要将原数据转换成如下:

士大夫v.png
3.已编辑了code


DATA PROJECT1.BILLING_Jan_Dec;
SET WORK.SORTED_BILLING_ACCOUNTS;
BY BILLING_ACCOUNT;

RETAIN BILL_JAN  BILL_FEB  BILL_MAR  BILL_APR  BILL_MAY BILL_JUN BILL_JUL BILL_AUG BILL_SEP BILL_OCT BILL_NOV BILL_DEC;

if BILLING_ACCOUNT = 1 then do;
BILL_JAN =0;
BILL_FEB =0;
BILL_MAR =0;
BILL_APR =0;
BILL_MAY =0;
BILL_JUN =0;
BILL_JUN =0;
BILL_JUL =0;
BILL_AUG =0;
BILL_SEP =0;
BILL_OCT =0;
BILL_NOV =0;
BILL_DEC =0;
end;

IF BILL_MTH = '1JAN2011'D THEN DO;
        BILL_JAN = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1FEB2011'D THEN DO;
        BILL_FEB = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1MAR2011'D THEN DO;
        BILL_MAR = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1APR2011'D THEN DO;
        BILL_APR = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1MAY2011'D THEN DO;
        BILL_MAY = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH ='1JUN2011'D THEN DO;
        BILL_JUN = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1JUL2011'D THEN DO;
        BILL_JUL = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1AUG2011'D THEN DO;
        BILL_AUG = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1SEP2011'D THEN DO;
        BILL_SEP = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1OCT2011'D THEN DO;
        BILL_OCT = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1NOV2011'D THEN DO;
        BILL_NOV = AMOUNT_TOPAY;
        END;
ELSE IF BILL_MTH = '1DEC2011'D THEN DO;
        BILL_DEC = AMOUNT_TOPAY;
        END;

IF LAST.BILLING_ACCOUNT = 1 THEN OUTPUT;

DROP BILL_MTH AMOUNT_TOPAY CREDIT_ADJ CURRENT_BILL_AMT LAST_BILL_AMT OUTSTANDING PAYMENT ROUNDING_AMT;
RUN;
4.结果和问题:

program出现了一个小感叹号
234.png
请问为什么会出现这种情况?代码我需要如何更改?
二维码

扫码加我 拉你入群

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

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

关键词:数据转换 感叹号 SAS 萌新 问题

234.png (177.58 KB)

234.png

沙发
caixiangyu17 发表于 2019-3-23 14:19:35 |只看作者 |坛友微信交流群
我也不会,不过支持一下

使用道具

藤椅
xiaopingN 发表于 2019-3-26 03:17:17 |只看作者 |坛友微信交流群
你用了BY BILLING_ACCOUNT, data set 也写的是SORTED_BILLING_ACCOUNTS,但是贴的图data set BILLING_ACCOUNTS 是unsorted. 另外用ARRAY可以大大简化程序。如果我来写code, 会是这样的:
DATA PROJECT1.BILLING_Jan_Dec;
SET WORK.SORTED_BILLING_ACCOUNTS;
BY BILLING_ACCOUNT;
RETAIN  BillJan BillFeb BillMar BillApr BillMay BillJun BillJul BillAug BillSep BillOct BillNov BillDec 0;
array BillMTH (12) $7 ('2011JAN' '2011FEB' '2011MAR' '2011APR' '2011MAY' '2011JUN' '2011JUL' '2011AUG' '2011SEP' '2011OCT' '2011NOV' '2011DEC');
array BillMonth (12) BillJan BillFeb BillMar BillApr BillMay BillJun BillJul BillAug BillSep BillOct BillNov BillDec;
   do i=1 to 12;
            if Bill_MTH= BillMTH (i) then BillMonth(i)=AMOUNT_TOPAY;
   end;
drop i Bill_MTH AMOUNT_TOPAY BillMTH1-BillMTH12;
if last.BILLING_ACCOUNT;
RUN;

使用道具

板凳
xiaopingN 发表于 2019-3-26 04:55:38 |只看作者 |坛友微信交流群
xiaopingN 发表于 2019-3-26 03:17
你用了BY BILLING_ACCOUNT, data set 也写的是SORTED_BILLING_ACCOUNTS,但是贴的图data set BILLING_ACCO ...
当然最简单的办法是用proc transpose。
proc transpose data=work.SORTED_BILLING_ACCOUNTS  out=PROJECT1.BILLING_Jan_Dec(rename=(col1=BillJan col2=BillFeb col3=BillMar col4=BillApr col5=BillMay col6=BillJun col7=BillJul col8=BillAug
col9=BillSep col10=BillOct col11=BillNov col12=BillDec)) Name=BILLING_ACCOUNT;
var AMOUNT_TOPAY;
by BILLING_ACCOUNT;
run;


使用道具

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

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

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

GMT+8, 2024-4-19 19:44