Online Appendix for Inventory and Shipment Policies for the Online Movie DVD Rental Industry Kyung Sung Jung, Casey Chung, Shun-Chen Niu, Chelliah Sriskandarajah e-mail: ksjung@ufl.edu, cxchung@caleres.com, scniu@utdallas.edu chelliah@mays.tamu.edu A. SAS Programs In this section, we provide the data and program files that are used to validate our demand formulation. The particular title used in this example is Julie. The data file and a list of our SAS codes are described in Sections A.1 and A.2, respectively. A detailed explanation of the code is provided in Section A.3. A.1. Data File Let the name of data file be Julie.txt. First, these data in Julie.txt file need to be read (in lines 1 3 in Section A.2). The columns t, Queue, Shipment, and Exchange in Table A.1 are used in this SAS program, where t is an index of each period (namely, obs ); Queue is the queue size; Shipment is the shipment counts and Exchange is the exchange counts in period t. Period t Queue, q t Shipment, s t Exchange, c t Remark -1 2497-9 1 291-8 2 3285-7 3 4451-6 4 5769-5 5 6959-4 6 818-3 7 9461-2 8 1441-1 9 11741 1 12718 7163 233 Street date 1 11 12682 4718 2298 2 12 12645 176 2256 3 13 1269 794 3396 4 14 1495 5283 Weekend 5 15 14266 5181 Weekend 6 16 1435 259 398 7 17 14547 367 3768 8 18 14186 2688 315 9 19 13824 1931 2979 1 2 136 152 3852 11 21 13376 5266 Weekend 12 22 13359 4249 Weekend 13 23 13319 2466 3524 14 24 137 2389 2952 Table A.1 The data set of Julie
A.2. SAS Code for demand formulation Let the name of SAS program be Julie PDM.sas. Our program can be divided into three parts: Lines 1 3 for input of the data; Lines 6 9 for the NLP procedure; and the remaining lines for formulating our demand function described in Section 2. The numbers of lines are added only for the references for programming explanation in Section A.3. 1 data dvd.sbm; 66 if obs >= 2 and obs <= 9 then 2 infile c:\dataset\julie.txt firstobs = 2; 67 do ; 3 input queue ship exchange; run; 68 Q1t = oldq1t + OldINC1t; Q2t = ; 4 proc print data=dvd.sbm; run; 69 Qt = Q1t + Q2t; 5 7 VQt = oldvinct; 6 proc nlp outall data=dvd.sbm maxit=3 maxfu=3 71 7 outest=mle tech=quanew out=vars MSING=1e-36 72 alphat = oldalphat + beta *oldinct/(m-1); 8 GCONV=1e-12 FDH=central FDInt=obj covariance=1 73 rt = oldrt - oldinct; 9 pcov phes pall; 74 1 75 INC1t = rt * (1-exp(-alphat)) * gamma; INC2t = ; 11 max ln likelihood ; 76 INCt = INC1t + INC2t; 12 77 VINCt = INCt*(1-(1-exp(-alpha1)) * gamma); 13 parms pi =.65837, gamma =.115697, alpha =.519736, 78 14 beta = 3.43774938, eta =.57467, tau =, theta = 1.2593, 79 E1t = ; E2t = ; 15 omega = 1.281485227, d1= 436.2192, d2= 425.547117; 8 Et = E1t + E2t; 16 81 17 bounds < pi <= 1, < gamma <= 1, < alpha <= 5, 82 FitQt = Qt; 18 < beta <= 5, < d1 <= 5, < eta <= 5, 83 DevQt = Queue - FitQt; 19 < tau <= 1, < d2 <= 5, 1 < theta <= 5, 84 StdQt = (VQt + d1**2)**.5; 2 < omega <= 5; 85 LNStdQt = (1/2)*Log(VQt + d1**2); 21 nlincon E1t >=., E2t >=. /EVERYOBS; 86 22 87 LNStdEt = ; objrho = ; 23 g = 1; m = 25; 88 objrhoq = (DevQt/StdQt)**2/2; 24 Q11= 2497; Q21 = ; 89 objrhoqe = ; objrhoe = ; 25 Q1 = Q11 + Q21; 9 26 VQ1 = ; 91 oldq1t = Q1t; oldrt = rt; 27 92 oldalphat = alphat; OldINC1t = INC1t; 28 alpha1 = alpha + beta*q1/(m-1); 93 oldet = Et; oldinct = INCt; 29 r1 = m*pi - Q1; 94 olde2t = E2t; oldvinct = VINCt; 3 95 olde1t = E1t; 31 INC11 = r1 * (1-exp(-alpha1)) * gamma; INC21 = ; 96 end ; 32 INC1 = INC11 + INC21; 97 33 VINC1 = INC1*(1-(1-exp(-alpha1)) * gamma); 98 if obs = 1 then 34 99 do ; 35 if obs = 1 then 1 Q1t = oldq1t + OldINC1t; Q2t = ; 36 do ; 11 Qt = Q1t + Q2t; 37 Q1t = Q11 + INC11; Q2t = ; 12 VQt = oldvinct; 38 Qt = Q1t + Q2t; 13 FQt = Q1t / Qt; 39 VQt = VINC1; 14 4 15 alphat = oldalphat + beta *oldinct/(m-1); 41 alphat = alpha1 + beta *INC1/(m-1); 16 rt = oldrt - oldinct; 42 rt = r1 - INC1; 17 43 18 INC1t = rt * (1-exp(-alphat)) * gamma; 44 INC1t = rt * (1-exp(-alphat)) * gamma; INC2t = ; 19 INC2t = rt * (1-exp(-alphat)) *(1-gamma); 45 INCt = INC1t + INC2t; 11 INCt = INC1t + INC2t; 46 VINCt = INCt*(1-(1-exp(-alpha1)) * gamma); 111 VINCt = INCt*exp(-alphat); 47 112 48 E1t = ; E2t = ; 113 mship = min(ship,g*qt); 49 Et = E1t + E2t; 114 edft = exp(-tau*( obs - 1))* eta; 5 115 E1t = (Q1t-mship*FQt)*(1-exp(-edft)); E2t = ; 51 FitQt = Qt; 116 Et = E1t + E2t; 52 DevQt = Queue - FitQt; 117 VE1t = E1t * exp(-edft); VE2t = ; 53 StdQt = (VQt + d1**2)**.5; 118 VEt = VE1t + VE2t; 54 LNStdQt = (1/2)*Log(VQt + d1**2); 119 55 12 Wt = ; VEWt = ; 56 LNStdEt = ; objrho = ; 121 57 objrhoq = (DevQt/StdQt)**2/2; 122 FitQt = Qt; 58 objrhoqe = ; objrhoe = ; 123 DevQt = Queue - FitQt; 59 124 StdQt = (VQt + d1**2)**.5; 6 oldq1t = Q1t; oldrt = rt; 125 LNStdQt = (1/2)*Log(VQt + d1**2); 61 oldalphat = alphat; OldINC1t = INC1t; 126 62 oldet = Et; oldinct = INCt; 127 FitEt = Et; 63 olde2t = E2t; oldvinct = VINCt; 128 DevEt = Exchange - FitEt; 64 olde1t = E1t; 129 StdEt = (VEt + d2**2)**.5; 65 end ; 13 covewt = ;
131 LNStdEt = ; objrho = ; 213 if ( obs >= 14 and obs <= 15) or 132 objrhoq = (DevQt/StdQt)**2/2; 214 ( obs >= 21 and obs <= 22) then 133 objrhoqe = ; objrhoe = ; 215 do; 134 216 Q1t = oldq1t + OldINC1t - oldmship*oldfqt - olde1t; 135 oldq1t = Q1t; oldqt = Qt; 217 Q2t=oldQ2t+OldINC2t-oldmship*(1-oldFQt)-oldE2t-oldWt; 136 oldrt = rt; oldalphat = alphat; 218 Qt = Q1t + Q2t; 137 OldINC1t = INC1t; oldinct = INCt; 219 138 oldvinct = VINCt; oldve1t = VE1t; 22 VQt = oldvinct + oldve1t + oldvewt; 139 oldvet = VEt; oldvewt = VEWt; 221 FQt = Q1t / Qt; 14 olddevet = DevEt; oldstdet = StdEt; 222 141 oldet = Et; olde1t = E1t; 223 alphat = oldalphat + beta *(oldinct-oldwt)/(m-1); 142 olde2t = E2t; oldmship = mship; 224 rt = oldrt - oldinct + oldwt; 143 oldwt = Wt; oldfqt = FQt; 225 144 oldcovewt = covewt; oldq2t = Q2t; 226 INC1t = rt * (1-exp(-alphat)) * gamma; 145 oldinc2t = INC2t; 227 INC2t = rt * (1-exp(-alphat)) *(1-gamma); 146 end; 228 INCt = INC1t + INC2t; 147 229 VINCt = INCt*exp(-alphat); 148 if ( obs >= 11 and obs <= 13) or 23 149 ( obs >= 16 and obs <= 2) or 231 mship = min(ship,g*qt); 15 ( obs >= 23 and obs <= 24) then 232 edft = exp(-tau*( obs - 1))*eta*theta; 151 do ; 233 E1t = (Q1t-mship*FQt)*(1-exp(-edft)); 152 Q1t = oldq1t + OldINC1t - oldmship * oldfqt - olde1t; 234 E2t = (Q2t-mship*(1-FQt))*(1-exp(-(edft+omega))) 153 Q2t=oldQ2t+OldINC2t-oldmship*(1-oldFQt)-oldE2t-oldWt; 235 *edft/(edft*omega); 154 Qt = Q1t + Q2t; 236 Et = E1t + E2t; 155 VQt = oldvinct + oldve1t + oldvewt; 237 156 FQt = Q1t / Qt; 238 VE1t = E1t * exp(-edft); 157 239 VE2t = E2t*(1-(1-exp(-(edft+omega))) 158 alphat = oldalphat + beta *(oldinct-oldwt)/(m-1); 24 *edft*theta/(edft+omega); 159 rt = oldrt - oldinct + oldwt; 241 VEt = VE1t + VE2t; 16 242 Wt = (Q2t - mship*(1-fqt))*(1-exp(-(edft+omega))) 161 INC1t = rt * (1-exp(-alphat)) * gamma; 243 *omega/(edft+omega); 162 INC2t = rt * (1-exp(-alphat)) *(1-gamma); 244 VEWt = (E2t+Wt)*exp(-(edft+omega)); 163 INCt = INC1t + INC2t; 245 164 246 FitQt = Qt; 165 VINCt = INCt*exp(-alphat); 247 DevQt = Queue - FitQt; 166 248 StdQt = (VQt + d1**2 + d2**2)**.5; 167 mship = min(ship,g*qt); 249 LNStdQt = (1/2)*Log(VQt + d1**2 + d2**2); 168 edft = exp(-tau*( obs - 1))* eta; 25 169 E1t = (Q1t-mship*FQt)*(1-exp(-edft)); 251 FitEt = Et; 17 E2t = (Q2t-mship*(1-FQt))*(1-exp(-(edft+omega))) 252 DevEt = Exchange - FitEt; 171 *edft/(edft+omega); 253 StdEt = (VEt + d2**2)**.5; 172 Et = E1t + E2t; 254 LNStdEt = (1/2)*Log(oldVEt + d2**2); 173 255 174 VE1t = E1t * exp(-edft); 256 covewt = -Wt*(1-exp(-(edft+omega)))*edft/(edft+omega); 175 VE2t= E2t * (1-(1-exp(-(edft+omega))) 257 CovQEt = - oldvet - oldcovewt; 176 *edft/(edft+omega)); 258 rhot = CovQEt / (StdQt*oldStdEt); 177 VEt = VE1t + VE2t; 259 178 Wt = (Q2t-mship*(1-FQt))*(1-exp(-(edft+omega))) 26 objrho = (1/2)*Log(1-rhot**2); 179 *omega/(edft+omega); 261 objrhoe = (olddevet/oldstdet)**2/(2*(1-rhot**2)); 18 VEWt = (E2t+Wt)*exp(-(edft+omega)); 262 objrhoqe=(rhot)/((1-rhot**2)*stdqt*oldstdet) 181 263 *DevQt*oldDevEt; 182 FitQt = Qt; 264 objrhoq = (DevQt/StdQt)**2/(2*(1-rhot**2)); 183 DevQt = Queue - FitQt; 265 184 StdQt = (VQt + d1**2 + d2**2)**.5; 266 oldqt = Qt; oldalphat = alphat; oldrt = rt; 185 LNStdQt = (1/2)*Log(VQt + d1**2 + d2**2); 267 oldq1t = Q1t; OldINC1t = INC1t; oldinct = INCt; 186 268 oldq2t = Q2t; oldvinct = VINCt; oldvet = VEt; 187 FitEt = Et; 269 oldet = Et; oldvewt = VEWt; oldstdet = StdEt; 188 DevEt = Exchange - FitEt; 27 olde1t = E1t; oldmship = mship; oldcovewt = covewt; 189 StdEt = (VEt + d2**2)**.5; 271 olde2t = E2t; oldve1t = VE1t; oldfqt = FQt; 19 LNStdEt = (1/2)*Log(oldVEt + d2**2); 272 oldwt = Wt; olddevet = DevEt; oldinc2t = INC2t; 191 273 end; 192 covewt = -Wt * (1-exp(-(edft+omega)))*edft/(edft+omega); 274 193 CovQEt = - oldvet - oldcovewt; 275 retain Q1t; retain oldq1t; retain VEWt; 194 rhot = CovQEt / (StdQt*oldStdEt); 276 retain Q2t ; retain oldq2t ; retain VEt; 195 277 retain Qt; retain oldqt; retain DevEt; 196 objrho = (1/2)*Log(1-rhot**2); 278 retain FQt; retain oldfqt; retain StdEt; 197 objrhoe = (olddevet/oldstdet)**2/(2*(1-rhot**2)); 279 retain rt; retain oldrt; retain Wt; 198 objrhoqe=(rhot*devqt*olddevet)/((1-rhot**2)*stdqt*oldstdet); 199 objrhoq = (DevQt/StdQt)**2/(2*(1-rhot**2)); 28 retain alphat; retain oldalphat; retain covewt; 2 281 retain INC1t ; retain oldinc1t; retain mship; 21 oldq1t = Q1t; oldqt = Qt; 282 retain INC2t; retain oldinc2t; retain oldvewt; 22 oldrt = rt; oldalphat = alphat; 283 retain INCt ; retain oldinct; etain oldvet; 23 OldINC1t = INC1t; oldinct = INCt; 284 retain VINCt; retain oldvinct; retain olddevet; 24 oldvinct = VINCt; oldve1t = VE1t; 285 retain E1t; retain olde1t; retain oldstdet; 25 oldvet = VEt; oldvewt = VEWt; 286 retain E2t; retain olde2t; retain oldwt; 26 olddevet = DevEt; oldstdet = StdEt; 287 retain Et; retain oldet; retain oldcovewt; 27 oldet = Et; olde1t = E1t; 288 retain VE1t; retain oldve1t; retain oldmship; 28 olde2t = E2t; oldmship = mship; 289 29 oldwt = Wt; oldfqt = FQt; 29 ln likelihood =-LNStdQt-LNStdEt-objrho 21 oldcovewt = covewt; oldq2t = Q2t; 291 -objrhoq+objrhoqe-objrhoe; 211 oldinc2t = INC2t; 292 run ; 212 end; 293
A.3. Explanation of the SAS Code Lines 1-3: Lines 6-9: Line 11: Input the data from the external file. Call non-linear programming procedure (proc nlp). Define the objective function. The variable ln likelihood is maximized. Lines 13-2: Set the initial value of ten parameters π, γ, α, β, η, τ, θ, ω, δ 1 and δ 2. Table A.2 represents the initial values of each parameter, which are based on the output from a separate Excel program by using Evolutionary Solver. In addition, set reasonable ranges for the parameters. Parameter L.B. Initial Value U.B. Parameter L.B. Initial Value U.B. π.658 1 γ.11567 1 α.5197 5 β 3.4377 1 η.57467 5 τ 1 θ 1 1.2593 5 ω 1.28148 5 δ 1 436.2 5 δ 2 425.547 5 L.B.: Lower Bound, U.B.: Upper Bound Table A.2 The initial values and the ranges of each parameter Julie and Julia Line 21: Impose all exchanges (E[C H t ] and E[C L t ]) designated as E1t and E2t on non-negative constraints. Lines 23-26: Define the initial input data g, m, E[Q 1 ], E[Q H 1] and E[Q L 1]. (E[Q 1 ], E[Q H 1], E[Q L 1]) are designated as (Q1, Q11, Q21). E[Q 1 ] is presumably given by E[Q 1 ] = q 1, i.e., (E[Q H 1], E[Q L 1]) = (q 1, ) in Table A.1. V[Q 1 ] designated as V Q1 is. Lines 28-29: Compute r 1 and α 1 designated as r1 and alpha1; see (7a), (8a). Lines 31-32: Compute (E[J 1 ], E[J 1], H E[J 1]) L designated as (INC1, INC11, INC21); see (9) (11). Line 33: Compute V[J 1 ] designated as VINC1; see (19). Lines 35-65: In order to implement SAS program easily, it is necessary to have a section during period t = 9 (i.e., obs = 1) separately. The detailed explanation is: Lines 37-38: Compute (E[Q 9 ], E[Q H 9], E[Q L 9]) designated as (Qt, Q1t, Q2t); see (5b), (6a). Line 39: Compute V[Q H 9 + Q L 9] designated as VQt; see (18). Lines 41-42: Compute r 9 and α 9 designated as rt and alphat; see (7b), (8b). Lines 44-46: Compute (E[J 9 ], E[J 9], H E[J 9]) L and V[J 9 ] designated as (INCt, INC1t, INC2t) and VINCt; see (9), (1), (11). Lines 48-49: Compute (E[C t ], E[C H t ], E[C L t ]) designated as (Et, E1t, E2t); see (13), (14). Lines 51-54: Compute V [Q t ] (in (18)) and the first term of objective function (in (32)) designated as stdqt and LNStdQt. Lines 56-58: Compute other elements of objective function. Lines 66-96: The logic from periods 8 (i.e. obs = 2) to 1 (i.e. obs = 9) is similar to that for period 1. We will illustrate the only differences: Line 68: Replace Q11 and INC11 with oldq1t and oldinct in Line 37. Line 7: Replace VINC1 with oldvinct in Lines 39.
Line 72: Replace alpha1 and INC1 with oldalphat and oldinct in Lines 41. Line 73: Replace r1 and INC11 with oldrt and oldinct in Lines 42. Lines 98-146: The logic during period (i.e., obs =1, street date) is similar to that for previous periods except for actions related to shipments and exchanges. We will illustrate the only differences: Line 13: Compute the fraction of shipment for Type-H subscribers based on the number of subscribers in the queue. Note that FQt = 1 during period t =. Line 114: Compute the discount factor (ηe τt ). Lines 117-118: Compute (V[C H t + C L t ], V[C H t ], V[C L t ]) designated as VEt, VE1t, and VE2t; see (29), (21), (27). Lines 129-131: Compute V [C t ] designated as StdEt for the next period (in Line 194); see (29). Lines 148-212: The logic during weekday (i.e. obs = 11, 12, 13, 16, 17, 18, 19, 2, 23, 24) is similar to that for previous periods except for actions related to withdrawals. The only differences will be illustrated: Line 152: Subtract two components (i.e., shipment sizes and exchange counts during the previous period) from Line 1; see (5c). Line 153: Compute E[Q L t ] designated as Q2t; see (6b). Line 17: Compute E[C L t ] designated as E2t; see (14). Line 175: Compute V [Ct L ] designated VE2t; see (27). Lines 178-18: Compute E[W t ] and V[C L t + W t ] designated as Wt and VEWt; see (15), (22). Line 192: Compute Cov[C L t, W t ] designated as covewt; see (28). Line 193: Compute Cov[C t, Q t+1 ] designated as CovQEt; see (26). Line 194: Compute ˆρ(t) designated as rhot; see (3). Lines 196-199: Compute other elements of objective function. Lines 213-273: The logic during weekend (i.e. obs = 14, 15, 21, 22) is similar to that for weekday except for discount factor. We will illustrate the only differences: Line 232: Replace (ηe τt ) with (θηe τt ) in Line 114. Lines 29-291: Compute the objective function; see (32). SAS will accumulate ln likelihood for all periods. B. Additional Empirical Results In this section, we provide additional empirical results in order to support Section 2.4 in the main paper. We provide a brief summary of the model fit for two additional titles: HP and Accidental. Recall that the test results for these two titles are reported in Table 3. For HP, the model fits are plotted in Figures B.1(a) and B.1(b). The fitted trajectories are somewhat similar to those for previous examples represented in Section 2.4. For this title, the two R 2 values are very high,.9772 for the queue sizes and.8496 for the exchange counts. Both sets of Z-scores are quite even, displayed in Figures B.1(c) and B.1(d).
2 Actual vs Fitted Queue Sizes 5 Actual vs Fitted Exchange Counts 18 45 16 4 Queue size 14 12 1 8 Exchange count 35 3 25 2 6 15 4 1 2 5 4 2-1 -8-6 -4-2 2 4 6 8 1 12 14 2 4 6 8 1 12 14 Period Period Actual Fitted Actual Fitted (a) Z-Scores for Queue Sizes 4 2 (b) Z-Scores for Exchange Counts -2-1 -8-6 -4-2 2 4 6 8 1 12 14-2 2 4 6 8 1 12 14-4 (c) Figure B.1-4 Fitted curves and Z-scores for HP. (d) For Accidental, the fitted queue sizes and exchange counts over time are plotted in Figures B.2(a) and B.2(b). Similar to other examples, our model produced excellent R 2 values,.9648 for the queue sizes and.7649 for exchange counts respectively. The corresponding Z-scores, represented in Figures B.2(c) and B.2(d), are also good. 7 Actual vs Fitted Queue Sizes 25 Actual vs Fitted Exchange Counts 6 2 Queue size 5 4 3 Exchange count 15 1 2 1 5-1 -8-6 -4-2 2 4 6 8 1 12 14 2 4 6 8 1 12 14 Period Period Actual Fitted Actual Fitted 4 2 (a) Z-Scores for Queue Sizes 4 2 (b) Z-Scores for Exchange Counts -1-8 -6-4 -2 2 4 6 8 1 12 14-2 -2 2 4 6 8 1 12 14-4 (c) Figure B.2-4 (d) Fitted curves and Z-scores for Accidental.
C. Mathematical Formulation We provide here the complete formulation of Problem Γ in Section 3.1. Given E[Q H ], E[Q L ] = E[W ] =, r, α, service level (c), and all other parameters, our objective is to minimize the initial order quantity I subject to constraints on inventory levels and shipment levels as dictated by the corresponding demand trajectory. Minimize I subject to I 1 = I S, t 1 I t = I t 1 S t 1 + f i S t 2 (i 1), t = 2, 3,..., 14 i=1 S t I t, t =, 1,..., 14 S t ge[q t ], t =, 1,..., 14 14 t= S = S H S t = S H t + S L t, t = 1, 2, 3, 6, 7,... 1, 13, 14 S t =, t = 4, 5, 11, 12 S t cmπ, E[Q t ] = E[Q H t ] + E[Q L t ], t =, 1,..., 14 E[Q H t ] = E[Q H t 1] S H t 1 + E[J H t 1], t = 1, 2,..., 14 E[Q L t ] = E[Q L t 1] S L t 1 + E[J L t 1] E[W t 1 ], t = 1, 2,..., 14, E[Q H S H t ] t = S t, E[Q H t ] + E[Q L t ] t = 1, 2,..., 14 E[Q L S L t ] t = S t, E[Q H t ] + E[Q L t ] t = 1, 2,..., 14 E[J t ] = E[J H t ] + E[J L t ], t =, 1,..., 14 E[J H t ] = r t (1 e α t )γ, t =, 1,..., 14 E[J L t ] = r t (1 e α t )(1 γ), t =, 1,..., 14, r t = r t 1 E[J t 1 ] + E[W t 1 ], t = 2, 3,..., 14 α t = α t 1 + β m 1 (E[J t 1] E[W t 1 ]), t = 2, 3,..., 14 E[W t ] = (E[Q L t ] S L t )(1 e ω ), t = 1, 2,..., 14 I t, S t, S H t, S L t, t =, 1,..., 14
D. General Information at Blockbuster The locations of these Blockbuster regional Distribution Centers (DCs) and their subscriber bases are shown in Table D.1. In this table Subs % refers to the percentage of the overall subscribers serviced by each regional DC. Subscribers are assigned to a primary regional DC based on the proximity of the subscriber to the DC (Chung 21). DC City State Subs % Ship % DC City State Subs % Ship % 1 Dallas TX 4.3 4.4 2 Phoenix AZ 2.89 3.24 2 Santa Ana CA 8.54 8.17 21 St Louis MO 1.82 1.98 3 College Pt NY 3.59 3.25 22 San Jose CA 2.68 3.7 4 Charlotte NC 4.71 4.94 23 Rochester NY 1.46 1.55 5 Seattle WA 3.38 3.51 24 Pittsburgh PA.94 1.6 6 Sacramento CA 4.23 3.85 25 Louisville KY 2.43 2.87 7 Minneapolis MN 1.92 1.97 26 Portland OR 1.86 2.9 8 Miami FL 3.6 3.19 27 Las Vegas NV.52.63 9 Lansing MI 2.74 2.31 28 Kansas City MO 1.71 1.82 1 Denver CO 2.77 2.6 29 Baton Rouge LA 1.69 1.9 11 Worcester MA 4.39 3.97 3 Richmond VA 2.66 2.52 12 Gaithersburg MD 3.6 3.24 31 South Daytona FL 2.58 3.12 13 Atlanta GA 3.86 3.67 32 Salt Lake City UT.89.84 14 Houston TX 2.45 2.43 33 Indianapolis IN 1.52 1.51 15 Philadelphia PA 3.18 3.2 34 San Antonio TX 2.6 2.6 16 Cleveland OH 2.1 1.84 35 Des Moines IA.53.82 17 Tampa FL 2.1 2.39 36 Pensacola FL 1.7 1.4 18 Edison NJ 2.99 2.57 37 Tulsa OK 1.49 1.49 19 Chicago IL 4.68 4.38 38 Aiea HI.58.7 Subs %: Subscriber %, Ship %: Shipment% Table D.1 Percent of subscribers and shipment based on DC location