Dear programmers,
I'm drilling many wells (defined in the column WELL_NAME) through the earth different layers. If I hit a layer, I like keep the name in a new column (LAYER_NAME2) until I reach the next layer. However, if I change the well (new WELL_NAME) then the value in the column LAYER_NAME2 should be empty until I hit the first layer in the next WELL.
What I have is below:
| WELL_NAME | DEPTH | LAYER_NAME1 |
| A | 0 | |
| A | 100 | |
| A | 200 | |
| A | 300 | XU |
| A | 400 | |
| A | 500 | |
| A | 600 | |
| A | 700 | |
| A | 800 | XT |
| A | 900 | |
| A | 1000 | |
| A | 1100 | VX |
| A | 1200 | |
| A | 1300 | |
| A | 1400 | |
| A | 1500 | |
| B | 0 | |
| B | 100 | |
| B | 200 | LT |
| B | 300 | |
| B | 400 | |
| B | 500 | |
| B | 600 | |
| B | 700 | XV |
| B | 800 | |
| B | 900 | |
| B | 1000 | |
| B | 1100 | |
| B | 1200 | |
| B | 1300 | LY |
| B | 1400 | |
| C | 0 | |
| C | 2000 | |
| C | 4000 | NAA |
| C | 6000 | |
| C | 8000 | |
| C | 10000 | |
| C | 12000 | |
| C | 14000 | |
| C | 16000 | ST |
| C | 18000 | |
| C | 20000 | AZ |
| C | 22000 | |
| C | 24000 | |
| D | 0 | |
| D | 500 | |
| D | 1000 | |
| D | 1500 | MU |
| D | 2000 | |
| D | 2500 | |
| D | 3000 | MY |
| D | 3500 | FT |
| D | 4000 | |
| D | 4500 | |
| D | 5000 | |
| D | 5500 | |
| D | 6000 | |
| D | 6500 | LA |
| D | 7000 | |
| D | 7500 | |
| D | 8000 |
What I want is the new column (LAYER_NAME2):
| WELL_NAME | DEPTH | LAYER_NAME1 | LAYER_NAME2 |
| A | 0 | ||
| A | 100 | ||
| A | 200 | ||
| A | 300 | XU | XU |
| A | 400 | XU | |
| A | 500 | XU | |
| A | 600 | XU | |
| A | 700 | XU | |
| A | 800 | XT | XT |
| A | 900 | XT | |
| A | 1000 | XT | |
| A | 1100 | VX | VX |
| A | 1200 | VX | |
| A | 1300 | VX | |
| A | 1400 | VX | |
| A | 1500 | VX | |
| B | 0 | ||
| B | 100 | ||
| B | 200 | LT | LT |
| B | 300 | LT | |
| B | 400 | LT | |
| B | 500 | LT | |
| B | 600 | LT | |
| B | 700 | XV | XV |
| B | 800 | XV | |
| B | 900 | XV | |
| B | 1000 | XV | |
| B | 1100 | XV | |
| B | 1200 | XV | |
| B | 1300 | LY | LY |
| B | 1400 | LY | |
| C | 0 | ||
| C | 2000 | ||
| C | 4000 | NAA | NAA |
| C | 6000 | NAA | |
| C | 8000 | NAA | |
| C | 10000 | NAA | |
| C | 12000 | NAA | |
| C | 14000 | NAA | |
| C | 16000 | ST | ST |
| C | 18000 | ST | |
| C | 20000 | AZ | AZ |
| C | 22000 | AZ | |
| C | 24000 | AZ | |
| D | 0 | ||
| D | 500 | ||
| D | 1000 | ||
| D | 1500 | MU | MU |
| D | 2000 | MU | |
| D | 2500 | MU | |
| D | 3000 | MY | MY |
| D | 3500 | FT | FT |
| D | 4000 | FT | |
| D | 4500 | FT | |
| D | 5000 | FT | |
| D | 5500 | FT | |
| D | 6000 | FT | |
| D | 6500 | LA | LA |
| D | 7000 | LA | |
| D | 7500 | LA | |
| D | 8000 | LA |
Observe that no layers exist when DEPTH=0
Can you please help with this?
Thank you very much in advance!
Best regards
Farshid Owrang
Let the RETAIN statement do it's thing!
data want;
length layer_name2 $ 3;
retain layer_name2;
set have;
by well_name;
if first.well_name or not missing(layer_name1)
then layer_name2=layer_name1;
run;
Try
data want;
do until(last.well_name);
set have;
by well_name;
length LAYER_NAME2 $10;
if LAYER_NAME1>' ' then LAYER_NAME2=LAYER_NAME1;
output;
end;
run;
Let the RETAIN statement do it's thing!
data want;
length layer_name2 $ 3;
retain layer_name2;
set have;
by well_name;
if first.well_name or not missing(layer_name1)
then layer_name2=layer_name1;
run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
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.
Ready to level-up your skills? Choose your own adventure.