Policy No | Gross Written Amt |
9019374 | 1,260.00 |
9019374 | 0 |
9019374 | 1,260.00 |
9019374 | -1,260.00 |
9019468 | 0 |
9019468 | 948 |
9019557 | 0 |
9019557 | -1,040.00 |
9013670 | 0 |
9013670 | 1,540.00 |
9013670 | 1,540.00 |
If any policy having Gross written amount negative then create a separate dataset.
So my output should be two dataset:
Policy No | Gross Written Amt |
9019374 | 1,260.00 |
9019374 | 0 |
9019374 | 1,260.00 |
9019374 | -1,260.00 |
9019557 | 0 |
9019557 | -1,040.00 |
If any policy having Gross written amount positive then create a separate dataset
another dataset should contains:
Policy No | Gross Written Amt |
9019468 | 0 |
9019468 | 948 |
9013670 | 1,540.00 |
9013670 | 1,540.00 |
Something like this?
data have;
input Policy_No$ Gross_Written_Amt;
datalines;
9019374 1260
9019374 0
9019374 1260
9019374 -1260
9019468 0
9019468 948
9019557 0
9019557 -1040
9013670 0
9013670 1540
9013670 1540
;
proc sql;
create table neg_pol as
select * from have
where Policy_No in
(select Policy_No from have where Gross_Written_Amt<0);
create table pos_pol as
select * from have
where Policy_No not in
(select Policy_No from neg_pol);
quit;
Something like this?
data have;
input Policy_No$ Gross_Written_Amt;
datalines;
9019374 1260
9019374 0
9019374 1260
9019374 -1260
9019468 0
9019468 948
9019557 0
9019557 -1040
9013670 0
9013670 1540
9013670 1540
;
proc sql;
create table neg_pol as
select * from have
where Policy_No in
(select Policy_No from have where Gross_Written_Amt<0);
create table pos_pol as
select * from have
where Policy_No not in
(select Policy_No from neg_pol);
quit;
Though shouldn't your second data set with positives only contain 5 observations?
Out of interest, why would you want to create two datasets? Its far simpler for programming to just assign a group value in the current data (also smaller storage) and then use that as a by group in further processing. For instance if you wanted to get means of the data, by pos/neg, in your example you would then need to write two proc means, in mine only one, with a by group. Its rarely a good idea to split data out.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.