简体   繁体   English

SAS Enterprise Guide proc sql - 使用 when 语句包含在内

[英]SAS Enterprise Guide proc sql - using when statements inclusively

I am trying to organize members by years when they were enrolled (in order to calculate retention) but I'm running into an issue.我试图按成员注册的年份来组织成员(以计算保留率),但我遇到了一个问题。 Namely, the code I'm using only assigns one year to each member, whereas I want to know all the years when they were enrolled.也就是说,我使用的代码只为每个成员分配一年,而我想知道他们注册的所有年份。 I need the program to assign more than one year where appropriate (and most members are there for multiple years).我需要该计划在适当的情况下分配超过一年的时间(并且大多数成员在那里工作多年)。

My code is as follows:我的代码如下:

proc sql;
create table tmp7day.ash_yearly_totals as
select prsn_uniq_id, 
(case 
when min_of_yyyymm < 201501 and max_of_yyyymm > 201312 then 2014
when min_of_yyyymm < 201601 and max_of_yyyymm > 201412 then 2015
when min_of_yyyymm < 201701 and max_of_yyyymm > 201512 then 2016
when min_of_yyyymm < 201801 and max_of_yyyymm > 201612 then 2017
when min_of_yyyymm < 201901 and max_of_yyyymm > 201712 then 2018
when min_of_yyyymm < 202001 and max_of_yyyymm > 201812 then 2019
when min_of_yyyymm < 202101 and max_of_yyyymm > 201912 then 2020
when min_of_yyyymm < 202105 and max_of_yyyymm > 202012 then 202104
else 0
end) as Year 
from tmp7day.retention_with_ash
where ash_ind = 1
/*group by year;*/
order by year asc;
quit;

Any suggestions would be appreciated.任何建议,将不胜感激。 Please let me know if my question didn't make sense.如果我的问题没有意义,请告诉我。

There are two solutions to this,有两种解决方法,

  1. Create multiple year variables like year_2014, year_2015,.., year_2021.. etc,.创建多个年份变量,如 year_2014、year_2015、..、year_2021.. 等。 and keep 'Y' in each variable based on different conditions.并根据不同的条件在每个变量中保留“Y”。 (Horizontal data) (横向数据)

  2. Create multiple records per member using output statement.使用输出语句为每个成员创建多个记录。 each record will have respective year in Year variable.每条记录在 Year 变量中都有各自的年份。 (Vertical data) (纵向数据)

Sample Code:示例代码:

data class;
   set sashelp.class(firstobs=1 obs=6);
   if _n_=1 then do;
      min_of_yyyymm=201503;
      max_of_yyyymm=201602;
   end;
   else if _n_=2 then do;
      min_of_yyyymm=201403;
      max_of_yyyymm=202004;
   end;
   else if _n_=3 then do;
      min_of_yyyymm=201603;
      max_of_yyyymm=201804;
   end;
   else if _n_=4 then do;
      min_of_yyyymm=201503;
      max_of_yyyymm=201904;
   end;
   else if _n_=5 then do;
      min_of_yyyymm=201603;
      max_of_yyyymm=201704;
   end;
   else if _n_=6 then do;
      min_of_yyyymm=201803;
      max_of_yyyymm=202104;
   end;
run;

/* create seperate record for each year per memner/name/id */
data class1;
   set class;
   if min_of_yyyymm < 201501 and max_of_yyyymm > 201312 then do; year= 2014;output; end;
   if min_of_yyyymm < 201601 and max_of_yyyymm > 201412 then do; year= 2015;output; end;
   if min_of_yyyymm < 201701 and max_of_yyyymm > 201512 then do; year= 2016;output; end;
   if min_of_yyyymm < 201801 and max_of_yyyymm > 201612 then do; year= 2017;output; end;
   if min_of_yyyymm < 201901 and max_of_yyyymm > 201712 then do; year= 2018;output; end;
   if min_of_yyyymm < 202001 and max_of_yyyymm > 201812 then do; year= 2019;output; end;
   if min_of_yyyymm < 202101 and max_of_yyyymm > 201912 then do; year= 2020;output; end;
   if min_of_yyyymm < 202105 and max_of_yyyymm > 202012 then do; year= 202104;output; end;
run;

/* or (more dynamic way, works for any range of years) */

data class2 (drop=i);
   set class;
   do i=(min_of_yyyymm-mod(min_of_yyyymm,100))/100 to (max_of_yyyymm-mod(max_of_yyyymm,100))/100;
      year=i;output;
   end;
run;

proc sort data=class2;
   by year name;
run;

proc report data=class2;
   column year name;
   define year/order group;
   define name/order;
run;

enter image description here在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 SAS 企业指南中 PROC SQL / SAS 代码中的其他 2 列中的值填充列? - How to fill column using values in 2 other columns in PROC SQL / SAS code in SAS Enterprise Guide? 如何在 SAS 企业指南中仅使用 PROC SQL select char 变量? - How to select only char variables with PROC SQL in SAS Enterprise Guide? SAS企业指南/ SQL性能 - SAS Enterprise Guide / SQL Performance 如何在 PROC SQL 中使用 SAS 企业指南中每月值的总和创建新列? - How to create new column in PROC SQL with sum of values per month in SAS enterprise Guide? 如何在 SAS 企业指南中的 PROC SQL 的两列之间创建标志 0/1 通知是否在 4 个月内更改? - How to create flag 0/1 inform whether was changed or not during 4 months between two columns in PROC SQL in SAS Enterprise Guide? 如何在 SAS 企业指南中的 PROC SQL 中创建标志通知 ID 上的两列是否有变化? - How to create flag inform whether was some change in two columns on ID in PROC SQL in SAS Enterprise Guide? 如何计算在 SAS 企业指南中的 PROC SQL 中定义 ID 的某个值出现了多少次? - How to count how many time some value appeard with defined ID in PROC SQL in SAS Enterprise Guide? 在SAS Proc SQL语句中使用Perl正则表达式 - Using Perl Regular Expressions in SAS Proc SQL statements 如何在 SAS 企业指南中的 PROC SQL 的某些日期中的 2 列之间更改值来创建 0/1 标志? - How to create 0/1 flag witch infrom whether values were changed between 2 column in some dates in PROC SQL in SAS Enterprise Guide? SAS Proc SQL中的别名和分组依据语句 - Aliases and Group By Statements in SAS Proc SQL
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM