Stata dummy variables start date end date - stata

I want to rearrange dummy variables which are currently not in an usable format for Stata: I have a start date and an end date for different measures (&different countries)- a dummy indicates "1" when the start date of the measure and the data-date "date2" equal. However, I need the dummy variable to be "1" until the end date (so the "active" measures).
Any ideas how to solve this?
clear all
sort country date2
by country: replace M1=M1[_n-1] if date_end2<=date2 & date_end2>0
My current code can't solve it, I don't know how to adress the end date right: (example for one Measure)
It is quite complicated, as the same type of measures can also overlap.
* Example generated by -dataex-. To install: ssc install dataex
clear
input float date2 str3 country float(date_start2 date_end2 M1 M2 M3 M4 M5)
21914 "FRA" . . . . . . .
21915 "FRA" . . . . . . .
21916 "FRA" . . . . . . .
21917 "FRA" . . . . . . .
21918 "FRA" . . . . . . .
21919 "FRA" . . . . . . .
21920 "FRA" . . . . . . .
21921 "FRA" . . . . . . .
21922 "FRA" . . . . . . .
21923 "FRA" . . . . . . .
21924 "FRA" . . . . . . .
21925 "FRA" . . . . . . .
21926 "FRA" . . . . . . .
21927 "FRA" . . . . . . .
21928 "FRA" . . . . . . .
21929 "FRA" . . . . . . .
21930 "FRA" . . . . . . .
21931 "FRA" . . . . . . .
21932 "FRA" . . . . . . .
21933 "FRA" . . . . . . .
21934 "FRA" . . . . . . .
21935 "FRA" . . . . . . .
21936 "FRA" . . . . . . .
21937 "FRA" . . . . . . .
21938 "FRA" . . . . . . .
21939 "FRA" . . . . . . .
21940 "FRA" . . . . . . .
21941 "FRA" . . . . . . .
21942 "FRA" . . . . . . .
21943 "FRA" . . . . . . .
21944 "FRA" . . . . . . .
21945 "FRA" . . . . . . .
21946 "FRA" . . . . . . .
21947 "FRA" . . . . . . .
21948 "FRA" . . . . . . .
21949 "FRA" . . . . . . .
21950 "FRA" . . . . . . .
21951 "FRA" . . . . . . .
21952 "FRA" . . . . . . .
21953 "FRA" . . . . . . .
21954 "FRA" . . . . . . .
21955 "FRA" . . . . . . .
21956 "FRA" . . . . . . .
21957 "FRA" . . . . . . .
21958 "FRA" . . . . . . .
21959 "FRA" . . . . . . .
21960 "FRA" . . . . . . .
21961 "FRA" . . . . . . .
21962 "FRA" . . . . . . .
21963 "FRA" . . . . . . .
21964 "FRA" . . . . . . .
21965 "FRA" . . . . . . .
21966 "FRA" . . . . . . .
21967 "FRA" . . . . . . .
21968 "FRA" . . . . . . .
21969 "FRA" . . . . . . .
21970 "FRA" . . . . . . .
21971 "FRA" . . . . . . .
21972 "FRA" . . . . . . .
21973 "FRA" . . . . . . .
21974 "FRA" 21974 22175 . . . 1 .
21975 "FRA" . . . . . . .
21976 "FRA" . . . . . . .
21977 "FRA" . . . . . . .
21978 "FRA" . . . . . . .
21979 "FRA" . . . . . . .
21980 "FRA" . . . . . . .
21981 "FRA" . . . . . . .
21982 "FRA" . . . . . . .
21983 "FRA" . . . . . . .
21984 "FRA" . . . . . . .
21985 "FRA" . . . . . . .
21986 "FRA" . . . . . . .
21987 "FRA" . . . . . . .
21988 "FRA" . . . . . . .
21989 "FRA" . . . . . . .
21990 "FRA" 21990 22045 1 . . . 1
21991 "FRA" 21991 22046 . 1 . . 1
21992 "FRA" . . . . . . .
21993 "FRA" . . . . . . .
21994 "FRA" . . . . . . .
21995 "FRA" . . . . . . .
21996 "FRA" . . . . . . .
21997 "FRA" . . . . . . .
21998 "FRA" . . . . . . .
21999 "FRA" . . . . . . .
22000 "FRA" . . . . . . .
22001 "FRA" . . . . . . .
22002 "FRA" . . . . . . .
22003 "FRA" . . . . . . .
22004 "FRA" . . . . . . .
22005 "FRA" . . . . . . .
22006 "FRA" . . . . . . .
22007 "FRA" . . . . . . .
22008 "FRA" . . . . . . .
22009 "FRA" . . . . . . .
22010 "FRA" . . . . . . .
22011 "FRA" . . . . . . .
22012 "FRA" . . . . . . .
22013 "FRA" . . . . . . .
end
format %tdCCYY-NN-DD date2
format %tdCCYY-NN-DD date_start2
format %tdCCYY-NN-DD date_end2

If you copy downwards like this
bysort country (date) : replace date_start2 = date_start2[_n-1] if missing(date_start2)
with similar code for date_end2, theh you can calculate new variables based on a comparison of date variables within observations. See this FAQ for more explanation and also help inrange().

Related

Recursively finding all paths in a grid

I am writing a small program that calculates--recursively--all paths to (0,0) on the grid given some walls that need to be avoided. The grid looks something like this:
. . . . . . . . . . .
| . . | . . . . . . .
. . | . . . . . . . .
. . - - - . . - - - -
. | . . . . . | . . .
. . . . . | . | . . .
. . . . . . - - . . .
. - - - . . . | . . .
. | . . . . . | . . .
. | . . . . . . . . .
. . . | . . . . . . O
You must get to the origin without ever increasing distance to the origin in your path.
I have written this code to find all paths:
int recursive_find_path(unsigned int x, unsigned int y, unsigned int distance, std::vector<std::vector<GRID_STATUS> > blocked_grid){
//if(x>blocked_grid.size()-1 or y>blocked_grid[x].size()-1 or x<0 or y<0 or x+y > distance or blocked_grid[y][x] == GRID_BLOCKED or blocked_grid[y][x] == GRID_TRAVELLED)
if(x>blocked_grid.size()-1 or y>blocked_grid[x].size()-1 or x<0 or y<0 or x+y<distance or blocked_grid[y][x] == GRID_BLOCKED){
return 0;
}
if(blocked_grid[y][x] == GRID_TRAVELLED){
return 0;
}
if(x==0 and y==0){
return 1;
}
blocked_grid[y][x] = GRID_TRAVELLED; // set position to 'travelled' on to avoid infinite recursion
return recursive_find_path(x-1,y, distance-1,blocked_grid)+recursive_find_path(x,y-1, distance-1, blocked_grid)+recursive_find_path(x+1,y, distance-1, blocked_grid);
}
NOTE: GRID_TRAVLLED and GRID_BLOCKED are values defined elsewhere in the program but essentially are just tokens to indicate that there is a wall or the point has been travelled on.
However, when running, the program outputs that there are zero paths!
Admittedly, I am not sure how many paths there are but I can at least count a few thus it can't be zero.
Does anyone know what is going wrong here?
Thanks in advance
edit
. . . . . . . . . . . . . . . . . . .
X . . X . . . . . . . . . . . . . . .
. . X . . . . . . . . . . . . . . . .
. . X X X . . X X X X . . . . . . . .
. X . . . . . X . . . . . . . . . . .
. . . . . X . X . . . . . . . . . . .
. . . . . . X X . . . . . . . . . . .
. X X X . . . X . . . . . . . . . . .
. X . . . . . X . . . . . . . . . . .
. X . . . . . . . . . . . . . . . . .
. . . X . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . X . . . . X . . . . . .
. . . . . . . X . . . . . X X X X X X
. . . . . . . X . . . . . . . . . . .
. . . . . . . X . . . . . . . . . . .
. . . . . . . X . . . . . . . . . X S
Using this grid, I get an infinite loop....
updated code:
if(x>blocked_grid.size()-1 or y>blocked_grid[x].size()-1 or x<0 or y<0 or blocked_grid[y][x] == GRID_BLOCKED){
return 0;
}
if(x==0 and y==0){
return 1;
}
return recursive_find_path(x-1,y,blocked_grid)+recursive_find_path(x,y-1, blocked_grid);
}
after letting it sit for a while it did return 540. I am almost certain there can't be 540 paths in this case
I noticed at:
return recursive_find_path(x-1,y, distance-1,blocked_grid)+recursive_find_path(x,y-1, distance-1, blocked_grid)+recursive_find_path(x+1,y, distance-1, blocked_grid);
The two points (x + 1, y) and (x - 1, y) cannot both be closer to the origin, yet you pass (distance - 1) to both of those recursive calls. This will cause distance to eventually equal -1 for many paths, which will then return 0, but until they return 0, those paths will be marked as travelled despite being spurious paths that should have been prevented from being travelled.
You should only check paths that move closer to the origin, those being (x -1, y) and (x, y - 1)

Grouping observations with same ID

I've taken a project in which the dataset separates the patient information and the disease observation, but the two observations have the same ID. Example:
ID: 12345 Patient age: 23, patient weight: 55, patient height: 180
ID: 12345 Disease progression: A, disease type: abc, Disease risk: 50
This goes on for every patient.
Now I want to run some statistics on this and for that I, as far as I know, have to consolidate this information in ONE observation, so we have patient characteristics and their disease characteristics in one observation. What would be the best way to do this? Bear in mind the two observations have mutually exclusive variables, so they can simply be "grouped" somehow.
* Example generated by -dataex-. To install: ssc install dataex
clear
input str32 record_id byte(treatment gender pcos aneurysmal_finding sz_anu_a_basilaris sz_anu_a_basilaris_2 sz_anu_a_basilaris_4)
"8a36ac06e58a541430cd8b31df3aeef2" . 1 0 2 . . .
"8a36ac06e58a541430cd8b31df3aeef2" . . . . . . .
"2afc1f12901992a1f973cde814615349" . 1 0 2 . . .
"2afc1f12901992a1f973cde814615349" . . . . . . .
"1e00442745c25082a64197b96065f755" . 1 0 2 . . .
"1e00442745c25082a64197b96065f755" . . . . . . .
"c90aef04e29f38fc3e21b919d5106ce8" . 1 0 2 . . .
"c90aef04e29f38fc3e21b919d5106ce8" . . . . . . .
"7cac71f3d31c7e9ec26e6a885ad554ab" . 2 0 2 . . .
"7cac71f3d31c7e9ec26e6a885ad554ab" . . . . . . .
"53c1f08aff25ace9afc46aca3263e7ca" . 1 0 2 . . .
"53c1f08aff25ace9afc46aca3263e7ca" . . . . . . .
"cdbf4328e0724f30950e437bc6bbe262" . 2 0 2 . . .
"cdbf4328e0724f30950e437bc6bbe262" . . . . . . .
"50d722dca92aee72c39c846066850a22" 1 2 0 2 . . .
"50d722dca92aee72c39c846066850a22" . . . . . . .
"ffe78f8927a81a5521f098aa077a755f" . 1 0 1 . . .
"ffe78f8927a81a5521f098aa077a755f" . . . . . . .
"aa2309be5c9b76012462fce3f43a8249" . 1 0 1 . . .
"aa2309be5c9b76012462fce3f43a8249" . . . . . . .
"4917b3d300e195b895e573474be6ccb6" . 1 0 2 . . .
"4917b3d300e195b895e573474be6ccb6" . . . . . . .
"b88557884343831060297ff4b67aeb36" . 1 . 2 . . .
"b88557884343831060297ff4b67aeb36" . . . . . . .
"ebe8ab86719aa71b68d7f0df3e451ce5" . . . 2 . . .
"8dd5267472002c796ce621984f9024ed" . . . . . . 3
"0b3e110c9765e14a5c41fadcc3cfc300" . . . . . . .
"8f58545ef8d37f290d26881743137a72" 1 2 0 2 . . .
"8f58545ef8d37f290d26881743137a72" . . . . . . .
"dcb6a27d1d4f5f1228860a76fa29e5ba" . 1 0 2 . . .
"dcb6a27d1d4f5f1228860a76fa29e5ba" . . . . . . .
"baedce78f2e736fe4d54dbdbe0460694" . 2 0 2 . . .
"baedce78f2e736fe4d54dbdbe0460694" . . . . . . .
"bb1db3b0eca9652cff3c76060b06d60b" 1 2 0 2 . . .
"bb1db3b0eca9652cff3c76060b06d60b" . . . . . . .
"6741bd218feba9de630dfe409a4e50ee" 1 2 0 2 . . .
"6741bd218feba9de630dfe409a4e50ee" . . . . . . .
"1e1425d670466e1a2c6c752d9227df17" . 2 0 2 . . .
"1e1425d670466e1a2c6c752d9227df17" . . . . . . .
"4c6672a06addc8e01842d2741be1857d" . 1 0 2 . . .
"4c6672a06addc8e01842d2741be1857d" . . . . . . .
"f1be80fbb7e4e1f5582780e25bfc8a2c" . 2 0 2 . . .
"f1be80fbb7e4e1f5582780e25bfc8a2c" . . . . . . .
"9991ec586e5f510e161fcad93fb1d79f" . 1 0 2 . . .
"9991ec586e5f510e161fcad93fb1d79f" . . . . . . .
"5c1eb56eccf9cf67ae6065f82b6eb6ce" . 1 0 2 . . .
"5c1eb56eccf9cf67ae6065f82b6eb6ce" . . . . . . .
"f9d10d2eb1951fa2ebc8b0509bb25593" . 1 0 2 . . .
"f9d10d2eb1951fa2ebc8b0509bb25593" . . . . . . .
"fbdf663512805caffe7a99d14fc9561f" . 2 0 2 . . .
"fbdf663512805caffe7a99d14fc9561f" . . . . . . .
"3b55aebe1b4b22e0c77168acc4b775dd" . 1 0 2 . . .
"3b55aebe1b4b22e0c77168acc4b775dd" . . . . . . .
"5f28194ddef4f9d057db2e4fcb7b5cf0" . 1 0 2 . . .
"5f28194ddef4f9d057db2e4fcb7b5cf0" . . . . . . .
"0b8d8253a8415275dbc2619e039985bb" . 1 0 2 5 . .
"0b8d8253a8415275dbc2619e039985bb" . . . . . . .
"4fb152c8524750b65b6717282cceb805" . 1 0 2 . . .
"4fb152c8524750b65b6717282cceb805" . . . . . . .
"ff5136e64c2110c355debca6acb74a13" . 1 0 2 . . .
"ff5136e64c2110c355debca6acb74a13" . . . . . . .
"29534fe6f18b75090b9d18f853ed7ec1" . 1 0 2 5 5 .
"29534fe6f18b75090b9d18f853ed7ec1" . . . . . . .
"8c334d2225db0661b25cf5f2c65fbcb9" . 1 0 2 . . .
"8c334d2225db0661b25cf5f2c65fbcb9" . . . . . . .
"68cf4b9f2db11cb9cf44fd0e03c53f16" . 2 . 2 . . .
"68cf4b9f2db11cb9cf44fd0e03c53f16" . . . . . . .
"6a44e65e7b1f33a3603acf2532bb40f9" . 1 0 2 . . .
"6a44e65e7b1f33a3603acf2532bb40f9" . . . . . . .
"2ed013748bf88df47c39d83bd48d8040" . 1 0 2 . . .
"2ed013748bf88df47c39d83bd48d8040" . . . . . . .
"c2f32f5b61b97d658f7b042b49b8da96" . 1 0 2 . . .
"c2f32f5b61b97d658f7b042b49b8da96" . . . . . . .
"58e1e0b5c29dee7d3739ec582d62b84c" . . . . . . .
"58e1e0b5c29dee7d3739ec582d62b84c" . . . . . . .
"8635b098d70b200fe8eef5dbf7c1c156" . 2 0 2 . . .
"8635b098d70b200fe8eef5dbf7c1c156" . . . . . . .
"266f1f1517fb50bafca92fff39c259d5" . 1 0 2 . . .
"266f1f1517fb50bafca92fff39c259d5" . . . . . . .
"d3df754a7322c02ed89f1208977a19ae" 1 2 0 2 5 . .
"d3df754a7322c02ed89f1208977a19ae" . . . . . . .
"46598c5d2da10731582d6342944e9337" . 1 0 2 . . .
"46598c5d2da10731582d6342944e9337" . . . . . . .
"8c2c5aa9b02eb1092b34cf38c2b1c83d" . 1 0 2 2 . .
"8c2c5aa9b02eb1092b34cf38c2b1c83d" . . . . . . .
"797c9cf7caf53f514f0154f34895fa80" . 1 0 2 . . .
"797c9cf7caf53f514f0154f34895fa80" . . . . . . .
"9b28a68095c520edcb56bee8aa5737b6" . 1 0 2 . . .
"9b28a68095c520edcb56bee8aa5737b6" . . . . . . .
"09e03748da35e9d799dc5d8ddf1909b5" . 1 0 2 . . .
"09e03748da35e9d799dc5d8ddf1909b5" . . . . . . .
"75d5574d8804d24932e3d0d9cbfa4b11" . 1 0 2 . . .
"75d5574d8804d24932e3d0d9cbfa4b11" . . . . . . .
"b5bda504efd4bd3b3be68513ccbf99ef" . 1 0 2 . . .
"b5bda504efd4bd3b3be68513ccbf99ef" . . . . . . .
"dc289c2a5a31355521dde31c4abd4c83" . 1 0 2 . . .
"dc289c2a5a31355521dde31c4abd4c83" . . . . . . .
"76ce83dbd64f05556e903deb54959d22" . 1 0 2 . . .
"76ce83dbd64f05556e903deb54959d22" . . . . . . .
"830ee6dd656938201f4a712607739768" . 1 0 2 . . .
end
label values treatment treatment_
label def treatment_ 1 "I blodfortyndende behandling", modify
label values gender gender_
label def gender_ 1 "Kvinde", modify
label def gender_ 2 "Mand", modify
label values pcos pcos_
label def pcos_ 0 "Nej", modify
label values aneurysmal_finding aneurysmal_finding_
label def aneurysmal_finding_ 1 "Screening", modify
label def aneurysmal_finding_ 2 "Tilfældig fund", modify
label values sz_anu_a_basilaris sz_anu_a_basilaris_
label def sz_anu_a_basilaris_ 2 "7-12 mm", modify
label def sz_anu_a_basilaris_ 5 "Uoplyst", modify
label values sz_anu_a_basilaris_2 sz_anu_a_basilaris_2_
label def sz_anu_a_basilaris_2_ 5 "Uoplyst", modify
label values sz_anu_a_basilaris_4 sz_anu_a_basilaris_4_
label def sz_anu_a_basilaris_4_ 3 "13-25 mm", modify
Essentially my problem could be solved using (assuming this syntax was correct):
gen obs1 = .
replace every variableValue in obs1 == variableValue in 12345
And then just iterating it for 1000s of observations..
On the assumption that each identifier is represented by at most 2 observations, and that each other variable is numeric and represented by a non-missing value in at most 1 observation, you can just collapse. The default collapse by means should work fine.
ds record_id, not
collapse `r(varlist)' , by(record_id)
A more cautious approach would be to check the assumptions first!
Assuming you have loaded both datasets.
First dataset is called dataset1.
Second dataset is called dataset2.
And your ID attribute is called id
Then you can call merge them on id.
use dataset1, clear
merge id using dataset2

C++ Eclipse Neon : non-aggregate type 'string' cannot be initialized with an initializer list

I am getting the error message
non-aggregate type 'string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') cannot be initialized with an initializer list
While using below as a global variable in my C++ code at Eclipse Neon.
string boardStr = {". . . . . . . . B . . . L L L . . . . . . . . . . . . . . . . .",
". . . . . . . . B . . . L L L . . . . . . . . . . . . . . . . .",
". . . . . . . . B . . . L L L . . . L L L . . . . . . . . . . .",
". . . . . . . . B . . . L L L . . L L L . . . R R . . . . . . .",
". . . . . . . . B . . . L L L L L L L L . . . R R . . . . . . .",
". . . . . . . . B . . . L L L L L L . . . . . . . . . . . . . .",
". . . . . . . . B . . . . . . . . . . . . R R . . . . . . . . .",
". . . . . . . . B B . . . . . . . . . . . R R . . . . . . . . .",
". . . . . . . . W B B . . . . . . . . . . . . . . . . . . . . .",
". . . R R . . . W W B B B B B B B B B B . . . . . . . . . . . .",
". . . R R . . . W W . . . . . . . . . B . . . . . . . . . . . .",
". . . . . . . . W W . . . . . . . . . B . . . . . . T . . . . .",
". . . W W W W W W W . . . . . . . . . B . . . . . . . . . . . .",
". . . W W W W W W W . . . . . . . . . B . . R R . . . . . . . .",
". . . W W . . . . . . . . . . B B B B B . . R R . W W W W W W W",
". . . W W . . . . . . . . . . B . . . . . . . . . W . . . . . .",
"W W W W . . . . . . . . . . . B . . . W W W W W W W . . . . . .",
". . . W W W W W W W . . . . . B . . . . . . . . . . . . B B B B",
". . . W W W W W W W . . . . . B B B . . . . . . . . . . B . . .",
". . . W W W W W W W . . . . . . . B W W W W W W B B B B B . . .",
". . . W W W W W W W . . . . . . . B W W W W W W B . . . . . . .",
". . . . . . . . . . . B B B . . . . . . . . . . B B . . . . . .",
". . . . . R R . . . . B . . . . . . . . . . . . . B . . . . . .",
". . . . . R R . . . . B . . . . . . . . . . . . . B . T . . . .",
". . . . . . . . . . . B . . . . . R R . . . . . . B . . . . . .",
". . . . . . . . . . . B . . . . . R R . . . . . . . . . . . . .",
". . . . . . . . . . . B . . . . . . . . . . R R . . . . . . . .",
". . . . . . . . . . . B . . . . . . . . . . R R . . . . . . . .",
". . . . . . . . . . . B . . . . . . . . . . R R . . . . . . . .",
". . . . . . . . . . . B . . . . . . . . . . R R . . . . . . . .",
". . . . . . . . . . . B . . . . . . . . . . R R . . . . . . . .",
". . . . . . . . . . . B . . . . . . . . . . R R . . . . . . . ."};
Following this post, I updated the compiler settings as below attached image
Still see the error. What am I missing? I am on Mac OSx El Capitan.
Here's a shorter example:
std::string fails{ "abc", "def", "ghi" };
There is no such constructor for std::string that takes a bunch of string literals.
But you don't need that anyway. You really are just trying to construct your string from one big literal. And string literals can be concatenated - just remove your commas:
std::string ok{ "abc" "def" "ghi" };
std::string also_ok = "abc" "def" "ghi";

SAS - issue in merging two datasets

I have the following table_1 :
TPMC PWC PWSC Site ET Date Time DIAM PXMC SF
7101 7101 US000521 1 Lathing 08Nov2016 11:58 890.3 1
7102 7102 US000361 1 Lathing 02Nov2016 13:01 878.1 1
7102 7102 UC000348 2 Lathing 07Nov2016 18:22 877.3 1
7106 7106 UC00424 1 Lathing 05Oct2016 9:43 890,4 1
7106 7106 UC00437 3 Lathing 07Nov2016 18:23 877.1 1
7106 7106 UC309 4 Lathing 07Nov2016 18:26 877.8 1
7107 7107 UC05327 1 Lathing 06Oct2016 8:41 837 1
7107 7107 UC200 2 Lathing 13Oct2016 12:53 890.55 1
7108 7108 UC000361 3 Lathing 02Nov2016 13:01 878.1 1
7108 7108 UC00432 1 Lathing 07Nov2016 18:25 877.8 1
7108 7108 UC106 2 Lathing 03Oct2016 9:37 890.3 1
and table_2 :
TPMC PWC PWSC Site ET Date Time DIAM PXMC SF
7101 . . . . 01JAN16 . . . .
7101 . . . . 02JAN16 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
7101 . . . . 30DEC16 . . . .
7101 . . . . 31DEC16 . . . .
7102 . . . . 01JAN16 . . . .
7102 . . . . 02JAN16 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
7102 . . . . 30DEC16 . . . .
7102 . . . . 31DEC16 . . . .
I want to merge two tables in a way that the output should look like something:
TPMC PWC PWSC Site ET Date Time DIAM PXMC SF
7101 . . . . 01JAN16 . . . .
7101 . . . . 02JAN16 . . . .
. . . . . . . . . .
7101 7101 US000521 1 Lathing 08Nov2016 11:58 890.3 1
. . . . . . . . . .
. . . . . . . . . .
7101 . . . . 30DEC16 . . . .
7101 . . . . 31DEC16 . . . .
7102 . . . . 01JAN16 . . . .
7102 . . . . 02JAN16 . . . .
. . . . . . . . . .
7102 7102 US000361 1 Lathing 02Nov2016 13:01 878.1 1
7102 7102 UC000348 2 Lathing 07Nov2016 18:22 877.3 1
. . . . . . . . . .
. . . . . . . . . .
7102 . . . . 30DEC16 . . . .
7102 . . . . 31DEC16 . . . .
How can it be done using 'Proc SQL' or 'Data Merge' or 'Combine'?
In the simplest form I used:
data data_set;
set table_1 table_2;
run;
But this produced duplicate values of dates. For example:
TPMC PWC ET PWSC Site Date Time DIAM PXMC SF
7618 . . . 1 29SEP2016 . . .
7618 . . UC00424 2 30SEP2016 . . .
7618 . Lathing UC00437 1 30SEP2016 17:15 890.500000 . .
7618 . Lathing UC309 2 30SEP2016 20:32 890.500000 . .
7618 . . . 3 01OCT2016 . . .
7618 . . . 1 02OCT2016 . . .
I don't know how can I avoid this. I do not want rows where there is no 'ET' (i.e. ET is '.' or empty, I do not want those rows).
Also I want to learn other methods for future use.
One way to append 2 tables is using proc sql.
proc sql;
select t1.* from table1 t1
union all
select t2.* from table2 t2;
quit;
Make sure the 2 tables have exactly the same column names and are structured the same way. If both tables have the same records you'll end up with duplicate rows which you will need to filter.
I will still stick with my answer as in above post...
data table2;
set have001 have002;
run;
Let me see how would I resolve 'duplicate' data issues.

C++ 2d array when subtracting 1 from col in position 0 it goes back a row to last spot in col

I'm making a reversi game in c++ and whenever I use a 10 by 10 array and search within the array to switch letters the game likes to switch up my rows and columns. This output would cause the o to switch to an x.
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . x o
x . . . . . . . . .