<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Trouble with proc datasets/proc append in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Trouble-with-proc-datasets-proc-append/m-p/160703#M263308</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am running the code below on the attached .csv files; the code gives me my desired dataset (dataset CDebt9 below). Unfortunately, however, once I perform the "proc datasets" step below (see text in &lt;STRONG&gt;bold&lt;/STRONG&gt;) &lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;I lose the values for a signinficant number of fields within the CDebt9 dataset; these value present in the preceding CDebt8 dataset. What can I do to avoid this?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Indicatively, the affected fields are the following (in the order that they appear under the first column in the CDebt8 and CDebt9 datasets: UnderwriterDelivery, FullPrice, PaymentDates, UnderwriterDiscount, MonthsBetweenBermudanCalls, OAS, PutNotificationDays, PriceToPublic, CallNotificationDays, CDates, MaturityDate, PutDates, FaceValues, FlatPrice, StepAnnualCouponRates, OriginationDate, PutStrikes, MonthsBetweenBermudanPuts, and CallStrikes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;options missing=' ';&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data WORK.CDebt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile '/filepath/Test1.csv' dsd lrecl=40000 firstobs=3;&lt;BR /&gt;informat FullPrice 10.8;&lt;BR /&gt;informat Notional 12.;&lt;BR /&gt;informat ID $10.;&lt;BR /&gt;informat PriceToPublic 15.;&lt;BR /&gt;informat CallNotificationDays 10.8;&lt;BR /&gt;informat AccruedDayCount $15.;&lt;BR /&gt;informat InterestFrequency 5.;&lt;BR /&gt;informat MaturityDate mmddyy10.;&lt;BR /&gt;informat FlatPrice 10.8;&lt;BR /&gt;informat AnnualCouponRates 6.4;&lt;BR /&gt;informat OriginationDate mmddyy10.;&lt;BR /&gt;informat CallFeature $15.;&lt;BR /&gt;informat CallDiscrete $5.;&lt;BR /&gt;informat Putable $5.;&lt;BR /&gt;informat FirstCpnDt mmddyy10.;&lt;BR /&gt;informat Issuer $30.;&lt;BR /&gt;informat CouponType $30.;&lt;BR /&gt;format FullPrice 10.8&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MaturityDate OriginationDate FirstCpnDt yymmddn8.;&lt;BR /&gt;input FullPrice Notional ID $ PriceToPublic CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount $ InterestFrequency MaturityDate FlatPrice&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnnualCouponRates OriginationDate CallFeature $ CallDiscrete $&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Putable $ FirstCpnDt Issuer $ CouponType $;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Y=round(((MaturityDate-OriginationDate)/360),0.1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W=intck('YEAR',OriginationDate,MaturityDate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; V=intck('MONTH',OriginationDate,FirstCpnDt);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*if CouponType='FIXED' then delete;*/&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data WORK.CDebtSchedules;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile '/filepath/CallSchedule.csv' dsd lrecl=40000 firstobs=2;&lt;BR /&gt;informat Cusip $10.;&lt;BR /&gt;informat CallDates mmddyy10.;&lt;BR /&gt;format CallDates yymmddn8.;&lt;BR /&gt;input Cusip CallDates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data WORK.StepRateSchedules;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile '/filepath/RateSchedule.csv' dsd lrecl=40000 firstobs=2;&lt;BR /&gt;informat Cusip $10.;&lt;BR /&gt;informat AnnualCouponRateDates mmddyy10.;&lt;BR /&gt;informat AnnualCouponRates 5.;&lt;BR /&gt;format AnnualCouponRateDates yymmddn8.;&lt;BR /&gt;input Cusip AnnualCouponRateDates AnnualCouponRates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data CDebt2;&lt;BR /&gt;&amp;nbsp; retain InstrumentName CouponDates ValuationDate DiscountSource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery FullPrice Notional ID PaymentDayCount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType CouponProfile IndexSource CouponEntry PaymentDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount MonthsBetweenBermudanCalls OAS NotificationDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays PriceToPublic Cusip CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount PutEntry InterestFrequency CallDates MaturityDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutDates FaceValues CouponAdjusting FlatPrice Description PutType&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust Proceeds SecurityType CallEntry Name SettlementDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category AnnualCouponRates Structure DisableLegacyMeasures&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginationDate PutStrikes MonthsBetweenBermudanPuts CallStrikes;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InstrumentName='CallablePutableBond';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValuationDate='20130930';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DiscountSource='LiborSpot';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery=-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IndexSource='LiborSpot';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponEntry='Manual';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAS=0.0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NotificationDate=' ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays=5;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutEntry='Manual';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FaceValues=100;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponAdjusting='false';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust='Following';&lt;BR /&gt;&amp;nbsp; Proceeds=' ';&lt;BR /&gt;&amp;nbsp; SecurityType=' ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallEntry='Manual';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SettlementDate='20130930';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonthsBetweenBermudanPuts=-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableLegacyMeasures='false';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutStrikes=100.0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallStrikes=100.0; &lt;BR /&gt;&amp;nbsp; set CDebt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; PaymentDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cusip=ID;&lt;BR /&gt;&amp;nbsp; Name=ID;&lt;BR /&gt;&amp;nbsp; PutDates=FirstCpnDt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z=put(X,mmddyy10.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount=PriceToPublic-FullPrice;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnnualCouponRates=AnnualCouponRates/100;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Structure=COMPRESS(W||' nc '||V||'m');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Notional=. then Notional=' ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if CouponType='FIXED' then CouponProfile='F';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Putable='N' then PutType='NoOption';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(AccruedDayCount,'30/360') then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount='30/360-ISDA';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDayCount='30/360-ISDA';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(AccruedDayCount,'ACT/360') then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount='Act/360';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDayCount='Act/360';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(AccruedDayCount,'ACT/ACT') then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount='Act/Act';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDayCount='Act/Act';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; if CallFeature='Onetime' then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType='European';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonthsBetweenBermudanCalls=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(Issuer,'FANNIE') then Category='AgencyDebt.Callable.FixedRate.Callable-European';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if CallFeature='Quarterly' or CallFeature='Monthly' then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType='Bermudan';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonthsBetweenBermudanCalls=3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(Issuer,'FANNIE') then Category='AgencyDebt.Callable.FixedRate.Callable-Bermudan';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; if index(Issuer,'TREASURY') then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=COMPRESS('Treas&amp;nbsp; '||AnnualCouponRates||'% '||Y||' YR '||Z);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if index(Issuer,'FANNIE') then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=COMPRESS('FNMA&amp;nbsp; '||AnnualCouponRates||'% '||Y||' YR '||Z);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if index(Issuer,'VALLEY') then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=COMPRESS('TVA&amp;nbsp; '||AnnualCouponRates||'% '||Y||' YR '||Z);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format CouponDates PaymentDates CallDates PutDates yymmddn8.;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let dsid=%sysfunc(open(CDebt2));&lt;BR /&gt;%let Nobs=%sysfunc(attrn(&amp;amp;dsid,nlobs));&lt;BR /&gt;%let dsid=%sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro WorkBench();&lt;/P&gt;&lt;P&gt;%do l=1 %to %eval(&amp;amp;Nobs);&lt;/P&gt;&lt;P&gt;data CDebt3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set CDebt2(firstobs=&amp;amp;l obs=&amp;amp;l);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if InterestFrequency&amp;lt;&amp;gt;.&amp;nbsp; then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if InterestFrequency=2&amp;nbsp; then interval='semiyear';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if InterestFrequency=12 then interval='month&amp;nbsp;&amp;nbsp; ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intervals= intck(interval,FirstCpnDt,MaturityDate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to intervals;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponDates=intnx(interval,MaturityDate,i-intervals,'same');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDates=CouponDates;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var=InterestFrequency;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else if InterestFrequency=. then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponDates=OriginationDate;&lt;BR /&gt; var=InterestFrequency;&lt;BR /&gt; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data CDebt4;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set CDebt3(where=(InterestFrequency&amp;lt;&amp;gt;.) obs=1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; CouponDates=FirstCpnDt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; PaymentDates=FirstCpnDt;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc append base=CDebt4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data=CDebt3;&lt;BR /&gt;run;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data CDebt5;&lt;BR /&gt; retain InstrumentName CouponDates ValuationDate DiscountSource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery FullPrice Notional ID PaymentDayCount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType CouponProfile IndexSource CouponEntry PaymentDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount MonthsBetweenBermudanCalls OAS NotificationDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays PriceToPublic Cusip CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount PutEntry InterestFrequency CallDates MaturityDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutDates FaceValues CouponAdjusting FlatPrice Description PutType&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust Proceeds SecurityType CallEntry Name SettlementDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category AnnualCouponRates Structure DisableLegacyMeasures&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginationDate PutStrikes MonthsBetweenBermudanPuts CallStrikes;&lt;BR /&gt; set CDebt4 (drop=InterestFrequency);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if var in (2, .) then InterestFrequency='SemiAnnually';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if var=12 then InterestFrequency='Monthly';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop Y X W V Z interval intervals i var;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('Cusip',Cusip);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/********************************/&lt;BR /&gt;/*****Adding CallSchedule********/&lt;BR /&gt;/********************************/&lt;/P&gt;&lt;P&gt;data CallSchedule (rename=(CallDates=CDates));&lt;BR /&gt;&amp;nbsp; set Cdebtschedules;&lt;BR /&gt;&amp;nbsp; where Cusip="&amp;amp;Cusip";&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data PaymentDates;&lt;BR /&gt;&amp;nbsp; set Cdebt5;&lt;BR /&gt;&amp;nbsp; keep Cusip PaymentDates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data PaymentCallDates;&lt;BR /&gt;&amp;nbsp; merge Paymentdates CallSchedule;&lt;BR /&gt;&amp;nbsp; by Cusip;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table CDebt6 as&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.*, b.CDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from CDebt5 a&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join PaymentCallDates b&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.Cusip=b.Cusip&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and a.PaymentDates=b.PaymentDates;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;/**************************************/&lt;BR /&gt;/*****Finished with CallSchedule*******/&lt;BR /&gt;/**************************************/&lt;/P&gt;&lt;P&gt;/********************************/&lt;BR /&gt;/*****Adding RateSchedule********/&lt;BR /&gt;/********************************/&lt;/P&gt;&lt;P&gt;data RateSchedule;&lt;BR /&gt;&amp;nbsp; set Steprateschedules ;&lt;BR /&gt;&amp;nbsp; where Cusip="&amp;amp;Cusip";&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sort data=RateSchedule;&lt;BR /&gt;&amp;nbsp; by Cusip AnnualCouponRateDates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data StepRates1;&lt;BR /&gt;format lowdate yymmddn8.;&lt;BR /&gt;set RateSchedule(rename=(AnnualCouponRateDates=CouponDates));&lt;BR /&gt;by Cusip coupondates;&lt;BR /&gt;lowdate = lag(coupondates)+1;&lt;BR /&gt;if first.Cusip then lowdate = "01Jan1800"d;&lt;BR /&gt;rename coupondates = highdate;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table CDebt7 as&lt;BR /&gt;&amp;nbsp; select a.*,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.AnnualCouponRates as StepAnnualCouponRates&lt;BR /&gt;&amp;nbsp; from CDebt6 as a&lt;BR /&gt;&amp;nbsp; left join StepRates1 as b&lt;BR /&gt;&amp;nbsp; on a.cusip=b.cusip&lt;BR /&gt;&amp;nbsp; and coupondates between lowdate and highdate&lt;BR /&gt;&amp;nbsp; order by a.Cusip, a.Coupondates;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;/***********************************/&lt;BR /&gt;/*****Finished with RateSchedule****/&lt;BR /&gt;/***********************************/&lt;/P&gt;&lt;P&gt;proc transpose data=CDebt7 out=CDebt8(rename=(_name_=var1));&lt;BR /&gt; var InstrumentName CouponDates ValuationDate DiscountSource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery FullPrice Notional ID PaymentDayCount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType CouponProfile IndexSource CouponEntry PaymentDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount MonthsBetweenBermudanCalls OAS NotificationDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays PriceToPublic Cusip CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount PutEntry InterestFrequency CDates MaturityDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutDates FaceValues CouponAdjusting FlatPrice Description PutType&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust Proceeds SecurityType CallEntry Name SettlementDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category StepAnnualCouponRates Structure DisableLegacyMeasures&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginationDate PutStrikes MonthsBetweenBermudanPuts CallStrikes;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%let dsid=%sysfunc(open(CDebt8));&lt;BR /&gt;%let n=%sysfunc(attrn(&amp;amp;dsid,nvars));&lt;BR /&gt;%let dsid=%sysfunc(close(&amp;amp;dsid));&lt;BR /&gt;%let NCol=%eval(&amp;amp;n-1);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data End;&lt;BR /&gt; array COL{&amp;amp;NCol} $ COL1-COL&amp;amp;NCol;&lt;BR /&gt; do i=1 to dim(COL);&lt;BR /&gt;&amp;nbsp; COL(i)='end';&lt;BR /&gt; end;&lt;BR /&gt; drop i;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data StartingArray;&lt;BR /&gt; array COL{51} $50. COL0-COL50;&lt;BR /&gt; COL0='Delete';&lt;BR /&gt; rename COL0=var1;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc datasets library=work;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; append base=StartingArray data=CDebt8 FORCE; &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; append base=StartingArray data=End FORCE;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;proc append&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base=CDebt9 data=StartingArray FORCE;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;%WorkBench();&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 25 Sep 2014 22:32:38 GMT</pubDate>
    <dc:creator>maroulator</dc:creator>
    <dc:date>2014-09-25T22:32:38Z</dc:date>
    <item>
      <title>Trouble with proc datasets/proc append</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Trouble-with-proc-datasets-proc-append/m-p/160703#M263308</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am running the code below on the attached .csv files; the code gives me my desired dataset (dataset CDebt9 below). Unfortunately, however, once I perform the "proc datasets" step below (see text in &lt;STRONG&gt;bold&lt;/STRONG&gt;) &lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;I lose the values for a signinficant number of fields within the CDebt9 dataset; these value present in the preceding CDebt8 dataset. What can I do to avoid this?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Indicatively, the affected fields are the following (in the order that they appear under the first column in the CDebt8 and CDebt9 datasets: UnderwriterDelivery, FullPrice, PaymentDates, UnderwriterDiscount, MonthsBetweenBermudanCalls, OAS, PutNotificationDays, PriceToPublic, CallNotificationDays, CDates, MaturityDate, PutDates, FaceValues, FlatPrice, StepAnnualCouponRates, OriginationDate, PutStrikes, MonthsBetweenBermudanPuts, and CallStrikes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;options missing=' ';&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data WORK.CDebt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile '/filepath/Test1.csv' dsd lrecl=40000 firstobs=3;&lt;BR /&gt;informat FullPrice 10.8;&lt;BR /&gt;informat Notional 12.;&lt;BR /&gt;informat ID $10.;&lt;BR /&gt;informat PriceToPublic 15.;&lt;BR /&gt;informat CallNotificationDays 10.8;&lt;BR /&gt;informat AccruedDayCount $15.;&lt;BR /&gt;informat InterestFrequency 5.;&lt;BR /&gt;informat MaturityDate mmddyy10.;&lt;BR /&gt;informat FlatPrice 10.8;&lt;BR /&gt;informat AnnualCouponRates 6.4;&lt;BR /&gt;informat OriginationDate mmddyy10.;&lt;BR /&gt;informat CallFeature $15.;&lt;BR /&gt;informat CallDiscrete $5.;&lt;BR /&gt;informat Putable $5.;&lt;BR /&gt;informat FirstCpnDt mmddyy10.;&lt;BR /&gt;informat Issuer $30.;&lt;BR /&gt;informat CouponType $30.;&lt;BR /&gt;format FullPrice 10.8&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MaturityDate OriginationDate FirstCpnDt yymmddn8.;&lt;BR /&gt;input FullPrice Notional ID $ PriceToPublic CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount $ InterestFrequency MaturityDate FlatPrice&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnnualCouponRates OriginationDate CallFeature $ CallDiscrete $&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Putable $ FirstCpnDt Issuer $ CouponType $;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Y=round(((MaturityDate-OriginationDate)/360),0.1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W=intck('YEAR',OriginationDate,MaturityDate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; V=intck('MONTH',OriginationDate,FirstCpnDt);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*if CouponType='FIXED' then delete;*/&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data WORK.CDebtSchedules;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile '/filepath/CallSchedule.csv' dsd lrecl=40000 firstobs=2;&lt;BR /&gt;informat Cusip $10.;&lt;BR /&gt;informat CallDates mmddyy10.;&lt;BR /&gt;format CallDates yymmddn8.;&lt;BR /&gt;input Cusip CallDates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data WORK.StepRateSchedules;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile '/filepath/RateSchedule.csv' dsd lrecl=40000 firstobs=2;&lt;BR /&gt;informat Cusip $10.;&lt;BR /&gt;informat AnnualCouponRateDates mmddyy10.;&lt;BR /&gt;informat AnnualCouponRates 5.;&lt;BR /&gt;format AnnualCouponRateDates yymmddn8.;&lt;BR /&gt;input Cusip AnnualCouponRateDates AnnualCouponRates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data CDebt2;&lt;BR /&gt;&amp;nbsp; retain InstrumentName CouponDates ValuationDate DiscountSource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery FullPrice Notional ID PaymentDayCount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType CouponProfile IndexSource CouponEntry PaymentDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount MonthsBetweenBermudanCalls OAS NotificationDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays PriceToPublic Cusip CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount PutEntry InterestFrequency CallDates MaturityDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutDates FaceValues CouponAdjusting FlatPrice Description PutType&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust Proceeds SecurityType CallEntry Name SettlementDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category AnnualCouponRates Structure DisableLegacyMeasures&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginationDate PutStrikes MonthsBetweenBermudanPuts CallStrikes;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InstrumentName='CallablePutableBond';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ValuationDate='20130930';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DiscountSource='LiborSpot';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery=-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IndexSource='LiborSpot';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponEntry='Manual';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OAS=0.0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NotificationDate=' ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays=5;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutEntry='Manual';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FaceValues=100;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponAdjusting='false';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust='Following';&lt;BR /&gt;&amp;nbsp; Proceeds=' ';&lt;BR /&gt;&amp;nbsp; SecurityType=' ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallEntry='Manual';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SettlementDate='20130930';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonthsBetweenBermudanPuts=-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableLegacyMeasures='false';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutStrikes=100.0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallStrikes=100.0; &lt;BR /&gt;&amp;nbsp; set CDebt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; PaymentDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cusip=ID;&lt;BR /&gt;&amp;nbsp; Name=ID;&lt;BR /&gt;&amp;nbsp; PutDates=FirstCpnDt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z=put(X,mmddyy10.);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount=PriceToPublic-FullPrice;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnnualCouponRates=AnnualCouponRates/100;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Structure=COMPRESS(W||' nc '||V||'m');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Notional=. then Notional=' ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if CouponType='FIXED' then CouponProfile='F';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Putable='N' then PutType='NoOption';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(AccruedDayCount,'30/360') then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount='30/360-ISDA';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDayCount='30/360-ISDA';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(AccruedDayCount,'ACT/360') then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount='Act/360';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDayCount='Act/360';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(AccruedDayCount,'ACT/ACT') then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount='Act/Act';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDayCount='Act/Act';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; if CallFeature='Onetime' then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType='European';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonthsBetweenBermudanCalls=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(Issuer,'FANNIE') then Category='AgencyDebt.Callable.FixedRate.Callable-European';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if CallFeature='Quarterly' or CallFeature='Monthly' then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType='Bermudan';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MonthsBetweenBermudanCalls=3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if index(Issuer,'FANNIE') then Category='AgencyDebt.Callable.FixedRate.Callable-Bermudan';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; if index(Issuer,'TREASURY') then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=COMPRESS('Treas&amp;nbsp; '||AnnualCouponRates||'% '||Y||' YR '||Z);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if index(Issuer,'FANNIE') then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=COMPRESS('FNMA&amp;nbsp; '||AnnualCouponRates||'% '||Y||' YR '||Z);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if index(Issuer,'VALLEY') then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description=COMPRESS('TVA&amp;nbsp; '||AnnualCouponRates||'% '||Y||' YR '||Z);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format CouponDates PaymentDates CallDates PutDates yymmddn8.;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let dsid=%sysfunc(open(CDebt2));&lt;BR /&gt;%let Nobs=%sysfunc(attrn(&amp;amp;dsid,nlobs));&lt;BR /&gt;%let dsid=%sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro WorkBench();&lt;/P&gt;&lt;P&gt;%do l=1 %to %eval(&amp;amp;Nobs);&lt;/P&gt;&lt;P&gt;data CDebt3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set CDebt2(firstobs=&amp;amp;l obs=&amp;amp;l);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if InterestFrequency&amp;lt;&amp;gt;.&amp;nbsp; then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if InterestFrequency=2&amp;nbsp; then interval='semiyear';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if InterestFrequency=12 then interval='month&amp;nbsp;&amp;nbsp; ';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; intervals= intck(interval,FirstCpnDt,MaturityDate);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1 to intervals;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponDates=intnx(interval,MaturityDate,i-intervals,'same');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDates=CouponDates;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var=InterestFrequency;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else if InterestFrequency=. then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PaymentDates=MaturityDate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CouponDates=OriginationDate;&lt;BR /&gt; var=InterestFrequency;&lt;BR /&gt; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data CDebt4;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set CDebt3(where=(InterestFrequency&amp;lt;&amp;gt;.) obs=1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; CouponDates=FirstCpnDt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; PaymentDates=FirstCpnDt;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc append base=CDebt4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data=CDebt3;&lt;BR /&gt;run;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data CDebt5;&lt;BR /&gt; retain InstrumentName CouponDates ValuationDate DiscountSource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery FullPrice Notional ID PaymentDayCount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType CouponProfile IndexSource CouponEntry PaymentDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount MonthsBetweenBermudanCalls OAS NotificationDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays PriceToPublic Cusip CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount PutEntry InterestFrequency CallDates MaturityDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutDates FaceValues CouponAdjusting FlatPrice Description PutType&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust Proceeds SecurityType CallEntry Name SettlementDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category AnnualCouponRates Structure DisableLegacyMeasures&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginationDate PutStrikes MonthsBetweenBermudanPuts CallStrikes;&lt;BR /&gt; set CDebt4 (drop=InterestFrequency);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if var in (2, .) then InterestFrequency='SemiAnnually';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if var=12 then InterestFrequency='Monthly';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; drop Y X W V Z interval intervals i var;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('Cusip',Cusip);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;/********************************/&lt;BR /&gt;/*****Adding CallSchedule********/&lt;BR /&gt;/********************************/&lt;/P&gt;&lt;P&gt;data CallSchedule (rename=(CallDates=CDates));&lt;BR /&gt;&amp;nbsp; set Cdebtschedules;&lt;BR /&gt;&amp;nbsp; where Cusip="&amp;amp;Cusip";&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data PaymentDates;&lt;BR /&gt;&amp;nbsp; set Cdebt5;&lt;BR /&gt;&amp;nbsp; keep Cusip PaymentDates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data PaymentCallDates;&lt;BR /&gt;&amp;nbsp; merge Paymentdates CallSchedule;&lt;BR /&gt;&amp;nbsp; by Cusip;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table CDebt6 as&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.*, b.CDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from CDebt5 a&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join PaymentCallDates b&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.Cusip=b.Cusip&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and a.PaymentDates=b.PaymentDates;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;/**************************************/&lt;BR /&gt;/*****Finished with CallSchedule*******/&lt;BR /&gt;/**************************************/&lt;/P&gt;&lt;P&gt;/********************************/&lt;BR /&gt;/*****Adding RateSchedule********/&lt;BR /&gt;/********************************/&lt;/P&gt;&lt;P&gt;data RateSchedule;&lt;BR /&gt;&amp;nbsp; set Steprateschedules ;&lt;BR /&gt;&amp;nbsp; where Cusip="&amp;amp;Cusip";&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sort data=RateSchedule;&lt;BR /&gt;&amp;nbsp; by Cusip AnnualCouponRateDates;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data StepRates1;&lt;BR /&gt;format lowdate yymmddn8.;&lt;BR /&gt;set RateSchedule(rename=(AnnualCouponRateDates=CouponDates));&lt;BR /&gt;by Cusip coupondates;&lt;BR /&gt;lowdate = lag(coupondates)+1;&lt;BR /&gt;if first.Cusip then lowdate = "01Jan1800"d;&lt;BR /&gt;rename coupondates = highdate;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table CDebt7 as&lt;BR /&gt;&amp;nbsp; select a.*,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.AnnualCouponRates as StepAnnualCouponRates&lt;BR /&gt;&amp;nbsp; from CDebt6 as a&lt;BR /&gt;&amp;nbsp; left join StepRates1 as b&lt;BR /&gt;&amp;nbsp; on a.cusip=b.cusip&lt;BR /&gt;&amp;nbsp; and coupondates between lowdate and highdate&lt;BR /&gt;&amp;nbsp; order by a.Cusip, a.Coupondates;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;/***********************************/&lt;BR /&gt;/*****Finished with RateSchedule****/&lt;BR /&gt;/***********************************/&lt;/P&gt;&lt;P&gt;proc transpose data=CDebt7 out=CDebt8(rename=(_name_=var1));&lt;BR /&gt; var InstrumentName CouponDates ValuationDate DiscountSource&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDelivery FullPrice Notional ID PaymentDayCount&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallType CouponProfile IndexSource CouponEntry PaymentDates&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UnderwriterDiscount MonthsBetweenBermudanCalls OAS NotificationDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutNotificationDays PriceToPublic Cusip CallNotificationDays&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AccruedDayCount PutEntry InterestFrequency CDates MaturityDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PutDates FaceValues CouponAdjusting FlatPrice Description PutType&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BusinessDayAdjust Proceeds SecurityType CallEntry Name SettlementDate&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category StepAnnualCouponRates Structure DisableLegacyMeasures&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OriginationDate PutStrikes MonthsBetweenBermudanPuts CallStrikes;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%let dsid=%sysfunc(open(CDebt8));&lt;BR /&gt;%let n=%sysfunc(attrn(&amp;amp;dsid,nvars));&lt;BR /&gt;%let dsid=%sysfunc(close(&amp;amp;dsid));&lt;BR /&gt;%let NCol=%eval(&amp;amp;n-1);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data End;&lt;BR /&gt; array COL{&amp;amp;NCol} $ COL1-COL&amp;amp;NCol;&lt;BR /&gt; do i=1 to dim(COL);&lt;BR /&gt;&amp;nbsp; COL(i)='end';&lt;BR /&gt; end;&lt;BR /&gt; drop i;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;data StartingArray;&lt;BR /&gt; array COL{51} $50. COL0-COL50;&lt;BR /&gt; COL0='Delete';&lt;BR /&gt; rename COL0=var1;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc datasets library=work;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; append base=StartingArray data=CDebt8 FORCE; &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; append base=StartingArray data=End FORCE;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;proc append&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base=CDebt9 data=StartingArray FORCE;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;%WorkBench();&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Sep 2014 22:32:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Trouble-with-proc-datasets-proc-append/m-p/160703#M263308</guid>
      <dc:creator>maroulator</dc:creator>
      <dc:date>2014-09-25T22:32:38Z</dc:date>
    </item>
    <item>
      <title>Re: Trouble with proc datasets/proc append</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Trouble-with-proc-datasets-proc-append/m-p/160704#M263309</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The most likely cause would be mismatched data types for some of the variables. I'm going to go on a limb and say that you want to look at STARTINGARRAY and that the numeric variables are missing for COL0 through COL50 in CDebt8.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Run the append code without force and see if you messages about character/numeric issues.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 25 Sep 2014 23:18:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Trouble-with-proc-datasets-proc-append/m-p/160704#M263309</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2014-09-25T23:18:44Z</dc:date>
    </item>
  </channel>
</rss>

